【发布时间】:2018-04-30 22:34:16
【问题描述】:
假设我有一个构造函数:
public Something(A a) {
this.a = a;
this.b = a.someLogicMethod();
this.c = b.someLogicMethod();
}
@Autowired
private Class d;
此代码可测试吗?如果不是,我应该更改什么以使其可测试并保持 b 的初始化通过对象 a 的方法,我将其作为我的类的构造函数的参数。
我想将 classB 的对象(我在测试类中创建的)传递给 Something 类,问题是应该模拟Something 并且模拟对象 a,所以我不能改变 a 的行为使用 when&thenReturn 因此,当调用 a.someLogicMethod 时,它将返回我在测试类中创建的 classB 对象,因为当模拟Something 时,将在调用 a.someLogicMethod() 并且 b 之后调用 when&thenReturn 逻辑放。 我也不能有 b 对象的设置器,因为它应该用 a.someLogicMethod() 初始化。 我需要模拟的原因是因为我希望对象 d 将被模拟。
谢谢。
【问题讨论】:
-
是的,它是可测试的。尝试测试它怎么样?这不是回答你的问题吗?或者至少让它对你更有用?
-
@JBNizet 实际上我做到了,问题是我想要模拟 a 对象,这对 b 来说是个问题。你怎么看?
-
我认为模拟 A 对象没有任何问题。去做吧,如果你有具体的问题,用相关的代码解释一下。
-
我注意到您的问题仍然是“开放的”:您没有接受答案。请查看并决定是否要accept 回答。或者让我知道我是否可以做些什么来增强我的输入以使其被接受。接受有助于未来的读者确定问题是否得到解决,并对花时间回答你的人表示感谢。
-
@GhostCat ,如果可以的话,我会删除这个问题,因为我不记得我想做什么以及到底是什么问题。当我现在阅读这个问题时,我不明白自己的问题,因为如果我想使用“某事”类作为 Mock 来测试另一个类,我不应该关心 a、b、c、d,因为 a、b ,c,d 可能是“Something”类的方法中使用的字段,如果我模拟这个类,那么我可以存根每个方法,所以我不需要这些字段。
标签: unit-testing testing mockito tdd