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

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

  •  
  •   hqtc · 2017-08-24 22:22:06 +08:00 · 3268 次点击
    这是一个创建于 2678 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    @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
    archer2ee
        1
    archer2ee  
       2017-08-24 22:46:31 +08:00
    @Resource
    SomeDao someDao;


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

    List<Some> list = someDao.getSomeList("233");
    }
    archer2ee
        2
    archer2ee  
       2017-08-24 22:52:21 +08:00
    如果要用 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");
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 13:12 · PVG 21:12 · LAX 05:12 · JFK 08:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.