我对Mockito很陌生,我有一个找不到解决方案的情况。我想使用Mockito测试一种方法。问题是在此方法中,创建了一个对象,并且该对象具有我想模拟的函数。
例如,这里有一个小的示例代码来说明我的问题:
public class ClassA {
public functionDoingDBStuff() {
//...........
}
}
public class ClassB {
final ClassA classAObj = null;
public functionXYZ() {
classAObj = new ClassA();
classAObj.functionDoingDBStuff();
}
}
@Test
MyTestFunction() {
ClassB classBObj = new ClassB();
// How can I access and mock functionDoingDBStuff() here?
}
所以在MyTestFunction()
中,我想测试functionXYZ()
,但模拟functionXYZ()
内部调用的函数functionDoingDBStuff()
。通过模拟,我的意思是返回我想要的测试特定结果。但是函数functionDoingDBStuff()
属于在functionXYZ()
中创建的对象,所以我不知道如何告诉Mockito从MyTestFunction()
内部访问它。我希望你能够理解我的意思。
对我来说,如果一段代码不容易测试,这表明代码结构有问题。无论如何,为什么new ClassA()
需要在functionXYZ
内完成?不能在对象级别实例化(最好还是注入)吗?如果是这样,您可以注入类 A 的模拟实例。
如果它仍然必须在方法中实例化,可以代替new ClassA()
,它应该包装在工厂方法中。然后你可以模拟工厂返回一个模拟ClassA
。