这是一个令人头疼的问题。我有这个:
@Autowired
KafkaConsumer kafkaConsumer;
...
private void ensureKafkaConsumerIsRunning() {
if(!kafkaConsumer.isRunning()) {
Thread kafkaThread = new Thread(kafkaConsumer);
synchronized(KafkaConsumer.class) {
kafkaThread.start();
}
}
}
测试:
@InjectMocks
private GreetingService greetingService;
...
@Mock
private KafkaConsumer kafkaConsumer;
...
@Test
public void sendToKafka_Msg_Test() throws Exception {
RecordMetadata recordMetadata = new RecordMetadata(null, 0L,0L,0L,0L,0,0);
when(kafkaConsumer.isRunning()).thenReturn(true);
when(kafkaProducer.sync(anyString())).thenReturn(recordMetadata);
assertEquals((long) greetingService.sendToKafka("test"), 0L);
}
在正在测试的课程中,我得到了一个NPE,内容为:
if(!kafkaConsumer.isRunning()) {
所有isRunning()所做的都是返回一个布尔值“ isRunning”,该布尔值设置为true或false。没什么。
我曾尝试将sureKafkaConsumerIsRunning()公开。我尝试在测试中使用Answers,而不是仅使用when()s,但无济于事。
有什么想法吗?
更新:
很明显,它已经过去了!简单地:
@Before
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
然后就是那个。奏效了。
感谢所有花时间阅读和回答的人。
答案 0 :(得分:0)
很明显,它已经过去了!简单地:
@Before
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
然后就是那个。奏效了。
感谢所有花时间阅读和回答的人。
答案 1 :(得分:-2)
如果kafkaConsumer.isRunning()
返回isRunning
而不是Boolean
或boolean
为空,则您的kafkaConsumer
为空。