Java 当在抽象类的具体方法中不使用注入的Mock时,Mockito

Java 当在抽象类的具体方法中不使用注入的Mock时,Mockito,java,spring,spring-boot,unit-testing,mockito,Java,Spring,Spring Boot,Unit Testing,Mockito,我正在测试一个扩展抽象类的类。具体类成员被注入,当来自具体类Mockito的方法调用时,则返回null作为方法调用,即使我在测试中定义了它 抽象类 公共抽象类A{ @注入 ObjA ObjA; 公共字符串methodA(){ 返回objA.x() } //未实施的方法 } B类 公共类B扩展了{ @注入 ObjB ObjB; 公共字符串方法B(){ 字符串x=methodA() 返回x; } } 测试类 @RunWith(MockitoJUnitRunner.class) 公共类BTest{

我正在测试一个扩展抽象类的类。具体类成员被注入,当来自具体类Mockito的方法调用时,则返回null作为方法调用,即使我在测试中定义了它

抽象类

公共抽象类A{
@注入
ObjA ObjA;
公共字符串methodA(){
返回objA.x()
}
//未实施的方法
}
B类

公共类B扩展了{
@注入
ObjB ObjB;
公共字符串方法B(){
字符串x=methodA()
返回x;
}
}
测试类

@RunWith(MockitoJUnitRunner.class)
公共类BTest{
@嘲弄
ObjA ObjA
@嘲弄
ObjB ObjB
@注射模拟
B B;
@以前
公共void init(){
Mockito.when(objA.x())。然后返回(“Hi”);
}
@试验
公共测试方法(){
字符串x=b.methodB();
assertEquals(x,“Hi”)//x为空,即使为模拟对象定义了,when-then
}
}

有人能告诉我when-then不起作用的原因吗?

在测试之前,您可以使用spring framework中的
ReflectionTestUtils
在被测试的类中分配mock。methodB显然缺少它的返回语句……被模拟的类被注入基类。当我调试测试时,我确实将ObjA视为一个MockitoInstance,但该Mockito对象的When then未被触发。我确实在方法B中有一个返回,但在发布问题时丢失了该返回。还有一个重要的差异:methodA调用x时没有参数,您使用字符串参数对其进行模拟。。。