2015-03-18 2 views
3

Я реализовал простой контроллер с простым запросом/ответом.Как проверить выход ошибки контроллера загрузки Spring?

Контроллер

@RestController 
@RequestMapping("/") 
public class HelloWorldController extends AbstractRestController { 

    @RequestMapping(value = "/hello", method = RequestMethod.POST) 
    public HelloWorldResponse sayHello(@Valid @RequestBody HelloWorldRequest request) { 

     String message = String.format("Hello %s!", request.getSayHelloTo()); 
     return new HelloWorldResponse(message); 
    } 

} 

Запрос

public class HelloWorldRequest { 

    @NotEmpty 
    @NotNull 
    private String sayHelloTo; 

    protected HelloWorldRequest() { 

    } 

    public HelloWorldRequest(String sayHelloTo) { 
     this.sayHelloTo = sayHelloTo; 
    } 

    public String getSayHelloTo() { 
     return sayHelloTo; 
    } 

    @Override 
    public String toString() { 
     return "HelloWorldRequest{" + 
       "sayHelloTo='" + sayHelloTo + '\'' + 
       '}'; 
    } 
} 

Когда я хочу, чтобы проверить правильность вывода для обработки ошибок по умолчанию я, кажется, не в состоянии проверить выход формата json по умолчанию, используя единичный тест. Ответ всегда кажется пустым. Когда я запускаю запрос с помощью обычной команды curl, вы видите правильный ответ. Я предполагаю, что это связано с тем, что возвращенный JSON не может быть отображен на HelloWorldResponse. Есть ли способ проверить, является ли возвращаемый вывод действительным для тела ответа?

Тест

class TestSpec extends Specification { 

    MockMvc mockMvc 

    def setup() { 
     mockMvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build() 
    } 

    def "Test simple action"() { 
     when: 
     def response = mockMvc.perform(post("/hello") 
       .contentType(MediaType.APPLICATION_JSON) 
       .content('{"sayHelloTo": ""}') 
     ) 

     then: 
     response.andExpect(status().isOk()) 
    } 
} 

Json Response

{ 
     "timestamp" : 1426615606, 
     "exception" : "org.springframework.web.bind.MissingServletRequestParameterException", 
     "status" : 400, 
     "error" : "Bad Request", 
     "path" : "/welcome", 
     "message" : "Required String parameter 'name' is not present" 
    } 
+0

Не могли бы вы показать нам свой тест? –

+0

Черт .. забыли тест действительно! Добавил его к вопросу. – Marco

ответ

0

пытаются отлаживать с помощью метода печати(), может быть исключение во время выполнения.

MvcResult andReturn = mockMvc.perform(get("/api") .accept(MediaType.APPLICATION_JSON)) .andDo(print()) .andReturn();

0

Класс @Controller Вы отправили и дело Test (и ответ), кажется, не совпадают (вы звоните /hello в тестовом случае и ваш @RequestMapping говорит /welcome ... Можем ли мы увидеть Правильный код? Похоже, у вас есть комплект @RequestParam("name"), но вы его не пропустите.

Смежные вопросы