我有下面的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。我做什么好?
发布于 2017-07-08 16:38:58
问题是,@InjectMethod是在时间之前初始化的,所以我得到了一个NPE。我做什么好?
MockitoAnnotations.initMocks(this)确实会首先创建模拟,这就是它应该工作的方式。在实例化模拟之前,不记录模拟行为。
另外,它不是@InjectMock,而是@InjectMocks。
而且你没有正确地使用它。
不要将参数传递给构造函数,如果您的Dequeuer类声明了一个Dequeuer(ApplicationConfig appConfig)构造函数,它将由Mockito框架直接注入:
@Mock
private ApplicationConfig config;
...
@InjectMocks
private Dequeuer dequeuer;NPE可能是由于对Mockito框架的错误使用造成的,但是在您的问题中显示的代码很难识别。
https://stackoverflow.com/questions/44988402
复制相似问题