Я новичок в JUnit и Mockito и пытаюсь смоделировать значение, возвращаемое из логического метода, для попадания внутрь условного выражения.
Я попробовал ответ из этого поста , но, похоже, не работает для этого. Я пытался использовать шпион, тогда CallRealMethod, не могу понять это.
Я проверял, когда значение истинно, но я не могу проникнуть внутрь остальной части для теста.
Вот пример того, что я сделал:
ServiceImpl.java имеет метод register (), который вызывает логический метод shouldRegister (). Метод shouldRegister () просто проверяет другую службу, чтобы узнать, является ли логическое значение истинным или ложным, и затем возвращает это.
Если true, он создает полезную нагрузку JsonNode для отправки, иначе, если false, он удаляет одно поле из полезной нагрузки.
// ServiceImpl.java:
// in the record() method:
if (body.has("fieldtoBeRemoved")) {
if (shouldRegister()) {
((ObjectNode) body).set("fieldtoBeRemoved");
} else {
// this is the line I am trying to test
((ObjectNode) body).remove("fieldtoBeRemoved");
}
}
// method being called above in the conditional
protected boolean shouldRegister() {
Optional<String> flag = configService.getString("booleanValue");
String stringFlag = flag.orElse("false");
return BooleanUtils.toBoolean(stringFlag);
}
// In the test
@InjectMocks
private ServiceImpl serviceImpl;
@Test
public void testingForFalse() {
serviceImpl = new ServiceImpl();
// what I am struggling with, trying to make the value false,
// so that it hits the else in the record() method in ServiceImpl
// and removes fieldtoBeRemoved from the payload
when(serviceImpl.shouldRegister()).thenCallRealMethod();
doReturn(false).when(spy(serviceImpl)).shouldRegister();
assertThat(fieldtoBeRemoved, is(""));
}
Когда я запускаю это, происходит сбой, потому что значение fieldtoBeRemoved не пустое, оно имеет значение из поля в полезной нагрузке, которого у него не должно быть. Я предполагаю, что значение все еще возвращается как истинное, потому что я не насмехаюсь правильно / устанавливая его как ложное для этого теста. Я также пытался издеваться над вызовом метода record ().
Любая помощь приветствуется!