Неверный запрос (400) в методе обмена TestRestTemplate GET - PullRequest
0 голосов
/ 04 января 2019

Я новичок в Spring Boot. Я запускаю весенний загрузочный тест с TestRestTemplate.

Успешно в тестировании получить запрос на List<Member>. Чтобы проверить запрос на получение члена, выбрасывает неверный запрос 400. Я следовал шаблону, аналогичному List<Member>, прочитал много ответов здесь, в Stackoverflow, где я получил подсказку для List<Member>, он выбрасывает неверный запрос. HttpEntity установлен на JSON. Member имеет id.

Найдите ниже MemberController, MemberControllerTest и HttpEntity методы установки заголовков

@GetMapping(path = "/api/member/{member-id}")
public ResponseEntity<Member> getMemberById(@PathVariable(name = "member- 
         id", required = true) Long memberId) {
    Member member = memberService.findById(memberId);
    if (member != null) {
        return ResponseEntity.ok(member);
    }
    return ResponseEntity.notFound().build();
}

@Test
@Transactional
public void getMemberSuccessful() throws Exception {
    HttpEntity<Object> member = getHttpEntity("{\"member-id\": \"2\"}");

    ResponseEntity<Member> response = 
    template.exchange("/api/member/{member-id}", HttpMethod.GET, member,
            Member.class, "member-id");

    Assert.assertEquals(200, response.getStatusCode().value());

}

private HttpEntity<Object> getHttpEntity(Object body) {
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_JSON);
    return new HttpEntity<Object>(body, headers);
}

Ожидаемый результат - тест для запуска и возврата кода состояния 200, но я получаю эту ошибку

java.lang.AssertionError: ожидается: <200>, но было: <400> в org.junit.Assert.fail (Assert.java:88) в org.junit.Assert.failNotEquals (Assert.java:834) в org.junit.Assert.assertEquals (Assert.java:645) в org.junit.Assert.assertEquals (Assert.java:631) com.thankgod.controller.MemberControllerTest.getMemberSuccessful (MemberControllerTest.java:151) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50) в org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47) в org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17) в org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate (RunBeforeTestExecutionCallbacks.java:73) в org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate (RunAfterTestExecutionCallbacks.java:83) в org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:26) в org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate (RunBeforeTestMethodCallbacks.java:75) в org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate (RunAfterTestMethodCallbacks.java:86) в org.springframework.test.context.junit4.statements.SpringRepeat.evaluate (SpringRepeat.java:84) в org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:251) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild (SpringJUnit4ClassRunner.java:97) в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) в org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) в org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java:61) в org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate (RunAfterTestClassCallbacks.java:70) в org.junit.runners.ParentRunner.run (ParentRunner.java:363) в org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run (SpringJUnit4ClassRunner.java:190) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:89) в org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.java:41) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:541) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:763) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:463) вorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:209) * * тысяча двадцать-одна

1 Ответ

0 голосов
/ 04 января 2019

Вы должны добавить переменную urivariable в конце метода exchange():

template.exchange("/api/member/{member-id}", HttpMethod.GET, null,
            Member.class, 2);

TestRestTemplate не будет читать его из HttpEntity объекта

...