У меня есть следующий класс, который содержит переменную-член, но Mockito не может насмехаться над методами переменной-члена.Ниже моя тестируемая система:
public class MessageConsumer {
private ConsumerResponse consumerResponse;
private NotificationConsumer notificationConsumer;
@Scheduled(cron = "${com.example.value}")
public void fetch() {
consumerResponse = notificationConsumer.fetchWithReturnConsumerResponse(); //no exception thrown on this line at all -- but could this be the cause of the problem in the test?
System.out.println("consumerResponse's responseCode: " + consumerResponse.getResponseCode()); // NullPointerException thrown here
}
public ConsumerResponse setConsumerResponse(ConsumerResponse consumerResponse) {
this.consumerResponse = consumerResponse;
}
public ConsumerResponse getConsumerResponse() {
return consumerResponse;
}
}
А вот соответствующий тест JUnit для класса:
@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public class MessageConsumerTest {
@Mock
private ConsumerResponse consumerResponse;
@InjectMocks
private MessageConsumer messageConsumer;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
//Failing unit test
@Test
public void getResponseCodeShouldReturn200() {
Mockito.when(consumerResponse.getResponseCode()).thenReturn("200");
messageConsumer.fetch()
}
}
Как видите, я высмеял ConsumerResponse consumerResponse
переменная, которая возвращает "200"
, когда вызывается метод consumerResponse.getResponseCode()
.Вместо этого я получаю NullPointerException
.
Я почти уверен, что правильно смоделировал переменную-член и правильно ее инициализировал (initMocks
).Я провел дни, пытаясь понять это.Куда я иду не так?