Как проверить веб-ответы при использовании Spring и test-mvc
-
11-12-2019 - |
Вопрос
Вопрос о том, как использовать test-mvc для модульного тестирования.
У меня есть простой контроллер:
@Controller
@RequestMapping("/users")
public class UserController {
private UserService business;
@Autowired
public UserController(UserService bus)
{
business = bus;
}
@RequestMapping(value="{id}", method = RequestMethod.GET)
public @ResponseBody User getUserById(@PathVariable String id) throws ItemNotFoundException{
return business.GetUserById(id);
}
(( Моя идея состоит в том, чтобы контроллеры были как можно тоньше.))
Чтобы протестировать этот контроллер, я пытаюсь сделать что-то вроде этого.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:mvc-dispatcher-servlet.xml"})
public class UserControllerTest extends ControllerTestBase {
UserService mockedService;
@Before
public void Setup()
{
MockitoAnnotations.initMocks( this );
mockedService = mock(UserService.class);
}
@Test
public void ReturnUserById() throws Exception{
User user = new User();
user.setName("Lasse");
stub(mockedService.GetUserById("lasse")).toReturn(user);
MockMvcBuilders.standaloneSetup(new UserController(mockedService)).build()
.perform(get("/users/lasse"))
.andExpect(status().isOk())
.andExpect(?????????????????????????????);
}
Мое намерение состоит в том, чтобы проверить, что возвращается правильный код JSON,,,,,,
Я не профи,,, поэтому не нашел как заменить?????????????????????????с кодом для проверки возвращаемой строки, но я уверен, что должен быть элегантный способ сделать это
Может ли кто-нибудь заполнить меня?
//lg
Решение
content().string(containsString("some part of the string"))
предполагая, что у вас есть этот импорт:
import static org.springframework.test.web.server.result.MockMvcResultMatchers.*;
Обновлять:Добавление jsonPath также на основе ваших комментариев:
Вы можете добавить зависимость к json-путь, версия 1.0.M1, похоже, зависит от гораздо более старой версии json-path:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>0.5.5</version>
<scope>test</scope>
</dependency>
При этом ваш тест может выглядеть так:
.andExpect(jsonPath("$.persons[0].first").value("firstName"));