我有以下ApplicationConfiguration
:
class ApplicationConfiguration {
private SQSConfig SQSConfig;
// Other configs and getters/setters
}
然后我进入Application
class Application {
private Dequeuer dequeuer;
public void run(ApplicationConfiguration config) {
// I need to pass ApplicationConfiguration because there are other variables that I need to use
dequeuer = new Dequeuer(config);
// Start dequeuer
}
}
因此,在我对Application
的测试中,我想将@InjectMethod
用于Dequeuer
:
class ApplicationTest {
@Mock
private ApplicationConfig config;
@Mock
private SQSConfig sqsConfig;
@InjectMocks
private Dequeuer dequeuer = new Dequeuer(config);
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(config.getSQSConfig()).thenReturn(sqsConfig);
}
}
问题是,@InjectMethod
在when
之前初始化,所以我得到了NPE。我该怎么办?
答案 0 :(得分:0)
问题是,@ InjectMethod在when之前被初始化,所以我 获得NPE。我该怎么办?
MockitoAnnotations.initMocks(this)
确实会首先创建模拟,这是它应该工作的方式。在实例化模拟之前,您不记录模拟行为。
此外,它不是@InjectMock
而是@InjectMocks
。
你没有正确使用它。
不要将参数传递给构造函数,如果Dequeuer
类声明了Dequeuer(ApplicationConfig appConfig)
构造函数,它将由Mockito框架直接注入:
@Mock
private ApplicationConfig config;
...
@InjectMocks
private Dequeuer dequeuer;
NPE可能是由于对Mockito框架的错误使用造成的,但是在您的问题中显示的代码很难识别。