2012-07-25 28 views
1

关于如何使用test-mvc进行单元测试的问题。如何在使用Spring和test-mvc时验证Web响应

我有一个简单的控制器:

@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("https://stackoverflow.com/users/lasse")) 
    .andExpect(status().isOk()) 
    .andExpect(?????????????????????????????); 

} 

我的目的是检查返回正确的JSON代码,,,,,,

我不是更换一个亲,,,所以我还没有找到一种方法????? ??????????????????用代码来验证返回的字符串,但我确信必须有一个优雅的方式来做到这一点

任何人都可以填写我吗?

// LG

回答

4
content().string(containsString("some part of the string")) 

假设你有这样导入:

import static org.springframework.test.web.server.result.MockMvcResultMatchers.*; 

更新:添加jsonPath还可根据您的意见:

您可以添加一个依赖于json-path, 1.0.M1似乎取决于json路径的老版本:

<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")); 
+0

好吧,坦克。有一些我试过使用的叫做jsonPath的东西。不过,没有运气,玛比我是完全错误的方式? – 2012-07-25 15:19:58

+0

是的,有,我已经添加了一个更新的答案与JSON路径 – 2012-07-25 16:14:19

+0

再次感谢,这是如此优雅,它可以得到我想:) – 2012-07-27 12:32:02

相关问题