Java 新实例上的Mock方法
我正在尝试使用Mockito框架和junit5创建Junit测试用例。我正在编写以下代码:Java 新实例上的Mock方法,java,mockito,junit5,Java,Mockito,Junit5,我正在尝试使用Mockito框架和junit5创建Junit测试用例。我正在编写以下代码: Class ClasstToBeTested { FirstClass a = new FirstClass(); public String methodToBeTested() { String str = a.firstMethod(); return str; } } Class FirstClass
Class ClasstToBeTested {
FirstClass a = new FirstClass();
public String methodToBeTested() {
String str = a.firstMethod();
return str;
}
}
Class FirstClass {
SecondClass b = new SecondClass();
public String firstMethod() {
String str = b.secondMethod();
return str;
}
}
我有一个像上面这样的类结构,我需要模拟secondMethod
我尝试了@spy-on-FirstClass并模拟了SecondClass和secondMethod,但模拟没有发生。在这种情况下,我怎么能嘲笑
注意-我无法更改该类的结构。您有一些选择:
第二类
实例,而不是在第一类
中构建它:class头等舱{
私立二等b班;
//注入第二类实例
财政类(乙类){
这个.b=b;
}
公共字符串方法(){
String str=b.secondMethod();
返回str;
}
}
然后您可以在测试中注入一个mock
SecondClass
setterclass头等舱{
SecondClass b=新的SecondClass();
//如果可用,使用测试注释的可见性进行注释。
//这里也可以注入模拟,但如果不小心使用,可能会导致问题。
无效设置SecondClassforTests(二级b){
这个.b=b;
}
公共字符串方法(){
String str=b.secondMethod();
返回str;
}
}
然后在测试中调用setter并通过模拟
你能改变你的班级结构吗?模拟不会以这种方式工作,至少对于
Mockito
。它们是遗留的,我将无法修改类结构。与Powermock有关吗?是的,请查看Powermock::whenNew
final Field declaredField = instanceOfFirstClass.getClass().getDeclaredFields("b");
declaredField.setAccessible(true);
declaredField.set(instanceOfFirstClass, yourMockedInstance);