Модульное тестирование Java: метод Mocking, который возвращает логическое значение не работает, получая NPE - PullRequest
0 голосов
/ 05 июля 2019

Это скребок головы. У меня есть это:

@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 (). Я пытался использовать Ответы в тесте, а не только когда (), но безрезультатно.

Есть идеи?


UPDATE:

Это было так очевидно, что прошло мимо нас всех! Просто:

@Before
public void initMocks(){
     MockitoAnnotations.initMocks(this);
}

Тогда это было так. Это сработало.

Спасибо всем, кто нашел время, чтобы прочитать и ответить.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Это было так очевидно, что прошло мимо нас всех!Просто:

@Before
public void initMocks(){
  MockitoAnnotations.initMocks(this);
}

Тогда это было так.Это сработало.

Спасибо всем, кто нашел время, чтобы прочитать и ответить.

0 голосов
/ 05 июля 2019

Ваш kafkaConsumer.isRunning() равен нулю, если isRunning возвращает Boolean, а не boolean или kafkaConsumer равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...