【发布时间】:2017-08-18 14:38:30
【问题描述】:
我有一个方法,我想使用 Mockito 框架测试不同对象之间的复杂交互。我会很感激一些指导方针。我知道代码没有多大意义。
getInstance() 方法都是静态的。我想模拟 obj3 并使 if 语句在测试中返回 true。
public MyRequest getRequest(ObjectOne obj1, ObjectTwo obj2) {
ObjectThree obj3 = FactoryOne.getInstance().getList().getObject(obj2.getId());
if(FactoryTwo.getInstance().isFlagSet("flag")){
....
}
return new MyRequest(....);
}
【问题讨论】:
-
也许包含该方法的类可以将两个工厂作为属性并从构造函数中获取它们,您可以使用该构造函数注入一些模拟来模拟
getList()和isFlagSet(...)。 -
“我知道代码意义不大”与其他一些相比,还不错。
-
为什么首先要模拟
obj3?测试不能简单地调用getRequest并为obj1和obj2提供适当的值,然后检查返回的值吗?由于这个网站上有很多问题,这个问题来自XY problem。 -
因为obj3可能是在访问db或者cache之后才构建的。
-
那就顺其自然吧。相信我(因为我几乎每天都写这样的测试),如果你关心有好的/有用的测试,投资于访问数据库的集成测试要好得多,而不是试图“假装它直到你成功”(Kent Beck 的表达)。
标签: java testing mocking mockito