Как я могу передать объект, используя MockMvc в качестве RequestBody? - PullRequest
0 голосов
/ 05 июля 2018

Итак, вот сценарий и проблема, с которой я столкнулся, объясненная в коде

// the call that I am making in my test, please note that myService is a Mocked object
Foo foo = new Foo();
when(myService.postFoo(foo)).thenReturn(true); 
mockMvc.perform(post("/myEndpoint")
    .contentType(APPLICATION_JSON_UTF8)
    .content(toJsonString(foo))
    .andExpect(status().isAccepted());


// this is the controller method that get's called
@PostMapping("/myEndpoint") 
@ResponseStatus(code = HttpStatus.ACCEPTED) 
public String postFoo(@RequestBody Foo foo) { 
    if (myService.postFoo(foo)) {
         return "YAY"; 
    } 
    return "" + 0 / 0; 
}

Проблема, с которой я сталкиваюсь, заключается в том, что foo, переданный постом mockMvc, является новым экземпляром Foo, поэтому оператор if для myService.postFoo (foo) не выполняется. Я предполагаю, что движок использовал jsonString моего объекта foo, чтобы создать новый объект, идентичный по полю, но другой объект, таким образом делая этот оператор 'if' не удачным.

Как я могу обойти это?

1 Ответ

0 голосов
/ 05 июля 2018

Используйте любой (Foo.class) в вашем макете, чем ваш, если должен совпадать.

http://static.javadoc.io/org.mockito/mockito-core/2.19.0/org/mockito/ArgumentMatchers.html#any-java.lang.Class-

...