【发布时间】:2014-12-18 17:37:52
【问题描述】:
假设我有这样的课程:
public class MyClass {
Dao dao;
public String myMethod(Dao d) {
dao = d;
String result = dao.query();
return result;
}
}
我想用 mockito 测试它。所以我创建了一个模拟对象并以这种方式调用该方法进行测试:
Dao mock = Mockito.mock(Dao.class);
Mockito.when(mock.myMethod()).thenReturn("ok");
new MyClass().myMethod(mock);
但是,假设我有一个这样的课程:
public class MyClass {
Dao dao = new Dao();
public String myMethod() {
String result = dao.query();
return result;
}
}
现在我不能将我的模拟作为参数传递,那么我将如何测试我的方法?有人可以举个例子吗?
【问题讨论】:
-
反射或者你需要使用一些我相信的工具。这也是控制反转和依赖注入如此流行的原因之一。它们使测试变得非常容易。
-
看看反射 - 它非常适合测试,它允许您设置类的任何字段。
-
使用 PowerMockito,如 MockConstructor、@PrepareForTest 等,例如,code.google.com/p/powermock/wiki/MockConstructor、stackoverflow.com/q/25160761/438992、code.google.com/p/powermock/wiki/MockitoUsage13 等。
-
@user1883212 - 您可以选择修改 MyClass 吗?如果是这样,那么依赖注入是前 2 个 cmets 中提到的一个不错的选择。如果没有,那么 Dave Newton 的使用 PowerMockito 的建议是一个选项。