Как я могу издеваться над классом обслуживания в моем тесте контроллера в Micronaut, используя JUnit5? - PullRequest
0 голосов
/ 04 июня 2019

Я пишу контрольный пример JUnit для контроллера в моем приложении для микронавигации. Контроллер имеет конечную точку GET, которая вызывает метод в моем классе обслуживания. Я получаю исключение NullPointerException, поэтому я предполагаю, что мой класс обслуживания может быть неправильно смоделирован, однако я не уверен. Я использую @Mock (Mockito) для сервиса.

Использую ли я правильную аннотацию для насмешки над уровнем сервиса? Я пытался искать в Google, но это не дало мне много, чтобы разобраться. Благодарю.

@MicronautTest
public class FPlanControllerTest {

private static final String url = "dummy_url";

@Inject
FPlanService fplanService;

@Inject
@Client("/")
RxHttpClient client;

@Test
public void testGetLayout() {
    FPlanUrl expectedFPlanUrl = new FPlanUrl(url);
    when(fplanService.getLayoutUrl(Mockito.anyString(), Mockito.anyString()))
                .thenReturn(expectedFPlanUrl);
        FPlanUrl actualFPlanUrl = client.toBlocking()
                .retrieve(HttpRequest.GET("/layout/1000545").header("layoutId", "7"), FPlanUrl.class);
        assertEquals(expectedFPlanUrl , actualFPlanUrl);
    }

@MockBean(FPlanService.class)
    FPlanService fplanService() {
        return mock(FPlanService.class);
    }
}

Я получил следующую ошибку.

java.lang.NullPointerException в com.apartment.controller.FPlanControllerTest.testGetLayout (FPlanControllerTest.java:44)

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Используйте @MockBean (io.micronaut.test.annotation.MockBean).

Документы - https://micronaut -projects.github.io / micronaut-test / latest / guide / # junit5

0 голосов
/ 06 июня 2019

Я понял, что пошло не так.Это давало исключение нулевого указателя, потому что ответ HTTP ожидал строку, а не объект FPlanUrl.Правильный код, как показано ниже:

@Test
public void testGetLayout() {
    FPlanUrl expectedFPlanUrl = new FPlanUrl("http://dummyurl.com");
    when(fplanService.getLayoutUrl(Mockito.anyString(), Mockito.anyString()))
            .thenReturn(expectedFPlanUrl);
    Assertions.assertEquals("{\"url\":\"http://dummyurl.com\"}", client.toBlocking().retrieve(HttpRequest.GET("/layout/123").header("layoutId", "7"), String.class);
    verify(fplanService).getLayoutUrl("123","7");
}
...