Как создать класс MapperToJsonString - PullRequest
0 голосов
/ 19 февраля 2020

Пожалуйста, помогите мне с моей проблемой, касающейся модульного тестирования моего класса.

Вот класс, который я не могу полностью покрыть своим JUnit.

@Component
public class Utils {

    @Autowired
    private ObjectMapper mapper = new ObjectMapper();

    @Autowired
    private LoggingService loggingService;

    public <E> String mapToJsonString(E object) {
        try {
            if (object == null) {
                throw new IOException(ErrorMessage.ERROR_PROCESSING_JSON_NULL);
            }

            return mapper.enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(object);
        } catch (IOException e) {
            loggingService.logError(this.getClass().getName(), "1", ErrorMessage.ERROR_MAPPING_TO_JSONSTRING, e);
            return "";
        }
    }
}

Вот мой контрольный пример:

@MockBean
private LoggingService loggingService;
@Before
public void setUp() {
    myModelClass = new MyModelclass();
    myModelClass.setStatus("U");
    myModelClass.setTermCode("001");
    myModelClass.setLocation("BGC");
}

@Test
public void testObjectToJson() throws JsonProcessingException {

    Mockito.when(utils.mapToJsonString(myModelClass)).thenReturn("");
    String output = utils.mapToJsonString(myModelClass);
    assertThat(output).isEqualTo(utils.mapToJsonString(""));
}

@Test(expected=IOException.class)
public void testJsonParsingException() {
    utils.mapToJsonString(null); 
    String output = utils.mapToJsonString(myModelClass);
    Mockito.when(utils.mapToJsonString(null)).thenThrow(new IOException());
    assertThat(output).isNull();
}

Любая помощь будет высоко ценится. Спасибо.

1 Ответ

0 голосов
/ 19 февраля 2020

Вы не должны насмехаться над Utils объектом или mapToJsonString() методом, так как это метод, который вы хотите проверить, и вы бы хотели вызвать реальный метод вместо mocked.

Что означает следующие утверждения не должно присутствовать в вашем junit.

Mockito.when(utils.mapToJsonString(myModelClass)).thenReturn("");
Mockito.when(utils.mapToJsonString(null)).thenThrow(new IOException());

Вначале я могу подумать о следующих junit, но вам следует подумать о большем количестве сценариев ios для тестирования и написания для них junit.

  1. Счастливый сценарий: вы передаете объект в mapToJsonString() и подтверждаете / проверяете возвращаемую JSON строку.
  2. Передаете null в mapToJsonString() и утверждаете / проверяете пустую строку. Как и в блоке catch, вы используете внешний объект loggingService, вам нужно смоделировать вызов loggingService.logError().

Кроме того, не пишите джунит для @Test(expected=IOException.class), так как он никогда не будет быть успешным, потому что вы не перебрасываете IOException в блоке catch.

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