Java 如何监视属于无法从外部访问的对象的方法?
我对莫基托很陌生,我遇到了一个无法解决的情况。我想用Mockito测试一个方法。问题是,在这个方法中,创建了一个对象,这个对象有一个我想要模拟的函数 例如,下面是一个小示例代码,它说明了我的问题:Java 如何监视属于无法从外部访问的对象的方法?,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我对莫基托很陌生,我遇到了一个无法解决的情况。我想用Mockito测试一个方法。问题是,在这个方法中,创建了一个对象,这个对象有一个我想要模拟的函数 例如,下面是一个小示例代码,它说明了我的问题: public class ClassA { public functionDoingDBStuff() { //........... } } public class ClassB { final ClassA classAObj = null;
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()
。通过mock,我的意思是返回我希望用于测试的特定结果。但是,函数functiondoingdbstaff()
属于在functionXYZ()
中创建的对象,因此我不知道如何告诉Mockito从MyTestFunction()中访问它。我希望您能够理解我的意思。如果一段代码无法轻松测试,这表明代码的结构存在问题,请告诉我。无论如何,为什么需要在函数xyz
中执行新ClassA()
?不能在对象级别实例化(更好的是注入)?如果是这样,您可以注入ClassA的模拟实例
如果它仍然必须在方法中实例化,可能不是执行newclassa()
,它应该包装在工厂方法中。然后,如果一段代码不能很容易地进行测试,这表明代码的结构存在问题,那么您可以模拟工厂,将模拟ClassA
返回给我。无论如何,为什么需要在函数xyz
中执行新ClassA()
?不能在对象级别实例化(更好的是注入)?如果是这样,您可以注入ClassA的模拟实例
如果它仍然必须在方法中实例化,可能不是执行newclassa()
,它应该包装在工厂方法中。然后可以模拟工厂以返回模拟ClassA
这就是对象不应该自己创建依赖项的原因。使用代替。考虑不要嘲笑<代码> ClassA < /代码>。注意:不需要模拟。这就是为什么对象不应该自己创建依赖项的原因。使用代替。考虑不要嘲笑<代码> ClassA < /代码>。注:不需要模拟。