使用Spring的mockMvc,如何检查返回的数据是否包含字符串的一部分?

时间:2016-05-17 18:45:25

标签: json spring junit return mockmvc

我正在使用Spring 3.2.11.RELEASE和JUnit 4.11。使用Spring mockMvc框架,如何检查返回JSON数据的方法是否包含特定的JSON元素?我有

    mockMvc.perform(get("/api/users/" + id))
        .andExpect(status().isOk())
        .andExpect(content().string("{\"id\":\"" + id + "\"}")); 

但是这会检查与返回的字符串的完全匹配,我宁愿检查JSON字符串是否包含我的本地字段“id”所包含的值。

3 个答案:

答案 0 :(得分:16)

看起来你可以传递一个Hamcrest Matcher而不是一个字符串。应该是这样的:

mockMvc.perform(get("/api/users/" + id))
    .andExpect(status().isOk())
    .andExpect(content().string(org.hamcrest.Matchers.containsString("{\"id\":\"" + id + "\"}"))); 

答案 1 :(得分:3)

另一种可以获得mockMVC请求的String响应的方法,以便您可以通过其他方式对其进行比较或操作,如下所示:

FBM_Order.sku    FBM_Order.quantity-purchased   QTY_ON_HND_AF    QTY_ON_HND_LO    QTY_ON_HND_S    QTY_ON_HND_SL
'SCHO645256'     1                              2                2               3               1         

你还可以在使用String方法时将整个东西包装在assertTrue中:

MvcResult result = mockMvc.perform(get("/api/users/" + id))
    .andExpect(status().isOk())
    .andReturn();
String stringResult = result.getResponse().getContentAsString();
boolean doesContain = stringResult.contains("{\"id\":\"" + id + "\"}");

我更喜欢批准的答案,我想我会将此作为另一种选择。

答案 2 :(得分:1)

更合适的方法是:

function newTask() {
    var i = 0;
    i+=1; //or i++
    console.log(i);

    if(i == 1) {
        class NewTask extends React.Component {
            render() {
                return (<div class="new-task">True</div>);
            }
        }
        ReactDOM.render(<NewTask/>, document.getElementById('forms'));

    }
    else if(i == 2) {
        class NewTask extends React.Component {
            render() {
                return (document.body.getElementById('new-task'));
            }
        }
        ReactDOM.render(<NewTask/>, document.getElementById('forms'));
    }
}