V2EX 首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

JMockit 老司机有没有,求指路:如何 Mock 一个 injectable 类的某个方法?

  •  
  •   hqtc · 185 天前 · 706 次点击
    这是一个创建于 185 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,假设我有如下代码:

    @Injectable
    SomeDao someDao;
    
    
    @Test
    public void someTest{
        new MockUp<SomeDao>(){
            @Mock
            List<Some> getSomeList(String id){
                return Collections.singletonList(new Some());
            }
        };
        
        List<Some> list = someDao.getSomeList("233");
    }
    

    我就是想 Mock 这个方法,让它给我一个带元素的 list。但是执行之后为什么我的 list 会是空的?

    别告诉我把这个 Dao 给整个 @Mocked 了,因为其他方法用到,不加 @Injectable 会报错。如果这两个注解同时加上,list 还是空的。

    2 回复  |  直到 2017-08-24 22:52:21 +08:00
        1
    archer2ee   185 天前
    @Resource
    SomeDao someDao;


    @Test
    public void someTest{
    new Expectations(someDao){{
    someDao.getSomeList("233");
    result = Collections.singletonList(new Some());
    }};

    List<Some> list = someDao.getSomeList("233");
    }
        2
    archer2ee   185 天前
    如果要用 MockUp 的话,注意要 Mock 的是实现类,比如这样:

    ```java
    @Injectable
    SomeDao someDao;


    @Test
    public void someTest{
    new MockUp<SomeDaoImpl>(){
    @Mock
    List<Some> getSomeList(String id){
    return Collections.singletonList(new Some());
    }
    };

    List<Some> list = someDao.getSomeList("233");
    }
    ```
    DigitalOcean
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   557 人在线   最高记录 3541   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.0 · 54ms · UTC 19:26 · PVG 03:26 · LAX 11:26 · JFK 14:26
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1