1

关于如何使用 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

4

1 回答 1

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-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"));
于 2012-07-25T14:20:07.747 回答