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

2017-08-24 22:22:06 +08:00
 hqtc

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

@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 还是空的。

3261 次点击
所在节点    Java
2 条回复
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
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");
}
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/385578

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX