我正在测试一个类中的方法。它正在调用抽象类的方法。
例如:
class abstract Abstract {
public ReturnObject abstractMethod(SomeObject value) {
// do something
return returnObject;
}
}
class Concreate extends Abstract {
public ReturnObject concreteMethod(SomeObject value) {
//do something
returnObject = abstractMethod(value);
return returnObject;
}
}
My UT is
class ConcreateTest {
@InjectMocks
private Concreate conctrete;
@Mock
private Concreate conctrete2;
@Test
public void test_method() {
when(conctrete2.abstractMethod(value)).thenReturn(returnObject);
conctrete.concreteMethod(value);
}
}
通过这种方式,它将返回NullPointerException。
从您所展示的内容来看,我几乎看不到您的代码,无法确定发生了什么,但我看到的一件事是,您正在模拟一个Concreate,然后将该模拟注入另一个Conccreate。在您显示的代码中,我没有看到告诉我一个Concreate使用另一个注入的Concreate。这本质上只是伪代码。因此,本质上,我假设您的主Concreate被注入到应用程序上下文中,而您的另一个Concreate则被注入到第一个上下文中。
你需要@Named来解决这个歧义,或者更一般地说,你必须给你的bean一个单独的名字,即使它们被嘲笑。