Java 在JUnit测试用例中使用Try-Catch

Java 在JUnit测试用例中使用Try-Catch,java,junit4,mockmvc,Java,Junit4,Mockmvc,最初,我在JavaSpringBootJUnitTestCase中使用MockMvc。 如果消息不成功,我将发送一个JSON,其中包含一条消息Success{“message”:“Success”},而不会抛出AssertionError异常。它应该检查catch块下的messagefailure语句 在不添加catch block语句的情况下,是否有任何可行的方法将成功和失败场景结合在一起。下面的代码解释了我的尝试 @Test public void test() throws Excepti

最初,我在JavaSpringBootJUnitTestCase中使用MockMvc。 如果消息不成功,我将发送一个JSON,其中包含一条消息Success{“message”:“Success”},而不会抛出AssertionError异常。它应该检查catch块下的messagefailure语句

在不添加catch block语句的情况下,是否有任何可行的方法将成功和失败场景结合在一起。下面的代码解释了我的尝试

@Test
public void test() throws Exception {
    try {
        result = mockMvc.perform(post("/test/{testId}", "44")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"order\": \"desc\"}")
                .accept(MediaType.APPLICATION_JSON)).andExpect(status().is(200))
                .andExpect(jsonPath("message").value("Success"))
                .andReturn();
    } catch (AssertionError e) {

        result = mockMvc.perform(post("/test/{testId}", "44")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"order\": \"desc\"}")
                .accept(MediaType.APPLICATION_JSON)).andExpect(status().is(200))
                .andExpect(jsonPath("message").value("Failure"))
                .andReturn();

    }

}
试试这个

 result = mockMvc.perform(post("/test/{testId}", "44")
                .contentType(MediaType.APPLICATION_JSON)
                .content("{\"order\": \"desc\"}")
                .accept(MediaType.APPLICATION_JSON)).andExpect(status().is(200))
                .andExpect(jsonPath("message").value(org.hamcrest.CoreMatchers.anyOf(is("Failure"), is("Success"))))
                .andReturn();

<>但是我建议你试着像马丁那样把这些测试用例分成单独的测试。

你真的应该考虑分解这些场景。对每个案例/场景进行测试是一种很好的做法,如果不成功,控制器会返回什么?它返回JSON,如下所示,{“message”:“Failure”}@MartínZaragoza在我的场景中,即使JSON返回Failure{“message”:“Failure”},我也必须通过测试类。返回(.andReturn())后是否有可能放置.andExpect语句(MvcResult)结果artin正确,请将它们拆分。为什么发布相同的请求有时会返回成功,有时返回失败?这是一个单元测试,您应该对输入有足够的控制权来指定结果。谢谢@Pavel Bachyla,但不幸的是,“is”命令不能用于MockMvc。@Lakshan,我尝试了这个选项,效果很好。请确保我们使用的是相同的方法:org.hamcrest.Matchers.isI imported'import org.hamcrest.core.Is',但我得到的错误是'the method Is(String)未定义用于类型测试',这些家伙是对的。对于两种情况,最好有两个测试。该方法是静态的,因此需要使用“静态导入”:导入static org.hamcrest.core.is.is;