Как проверить веб-ответы при использовании Spring и test-mvc

StackOverflow https://stackoverflow.com//questions/11651267

Вопрос

Вопрос о том, как использовать 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"));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top