Как я делаю Mock Test для моего контроллера выхода - PullRequest
0 голосов
/ 21 февраля 2019

Я хочу создать тест Spring Boot для моего контроллера, но я не знаю как.
Вот мой код:

Контроллер:

@PostMapping(value = Constants.LOGOUT_URL)
public String logout (HttpServletRequest request) throws ApiException {

    String authHeader = request.getHeader("Authorization");
    if (authHeader != null) {
        try {
            String tokenValue = authHeader.replace("Bearer", "").trim();
            OAuth2AccessToken accessToken = tokenStore.readAccessToken(tokenValue);
            tokenStore.removeAccessToken(accessToken);
        } catch (Exception e) {
            return HttpStatus.NOT_FOUND.toString();
        }
    }
    return Utils.convertDateTime();
}

Это мой тестэто возьмет меня NullPointerException:

@RunWith(SpringJUnit4ClassRunner.class)
@AutoConfigureRestDocs
public class AuthControllerTest {

    @Rule
    public JUnitRestDocumentation jUnitRestDocumentation = new JUnitRestDocumentation();

    @InjectMocks
    private AuthController controller = new AuthController();

    // To be initialised in the setup method.
    private MockMvc mockMvc;

    @Mock
    private AuthService service;

    @Before
    public void setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(controller)
            .apply(documentationConfiguration(this.jUnitRestDocumentation))
            .build();
    }

    @Test
    public void getLogout() throws Exception, ApiException {

        String result = "{\"date\":\"20190212:0000\"}";

       HttpServletRequest request = Mockito.mock(HttpServletRequest.class);
       when(request.getHeader("principal")).thenReturn("admin");
       when(request.getHeader("authorization")).thenReturn("authtoken");
       when(controller.logout(any(request.getClass()))).thenReturn(result);

    }
}

Я не знаю, как сделать тест для контроллера выхода из системы

Исключение, которое я получаю, следующее:

java.lang.NullPointerException: null
    at com.sodexo.oneapp.api.auth.AuthController.login(AuthController.java:35)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498) 

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете использовать Rest Assured для простого тестирования контроллера.Вот документация: https://github.com/rest-assured/rest-assured/wiki/Usage

Тест может выглядеть примерно так:

@RunWith(MockitoJUnitRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
class MyControllerTest {

@Mock
private MyService myService;

@InjectMocks
private MyController MyController;

@Before
public static void init(){
    RestAssured.baseURI = "http://localhost";
    RestAssured.port = 8080;
}

@Test
void givenUrl_whenSuccessOnGetLogoutAndStuff_thenCorrect() {

    when(this.myService.getLogout(stuff)).thenReturn(something);

    given()
        .standaloneSetup(new MyController(this.myService))
        .header("principal", "admin")
        .header("authorization", "authtoken")
    .when()
        .get("/logout")
    .then()
        .statusCode(200)
        .statusLine("...")
        .body(something);
    }

}

Убедитесь, что вы используете модуль MockMvc из Ass Assured:

import static io.restassured.module.mockmvc.RestAssuredMockMvc.*;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...