【问题标题】:Hamcrest: Unclear exception message?Hamcrest:异常信息不清楚?
【发布时间】:2019-08-11 06:37:10
【问题描述】:

虽然英语不是我的母语,但我仍然认为Hamcrest的以下错误信息是错误的。

我有以下验证方法:

private void validateReturnedCode() {

    List<HTTPStatusCodes> expectedStatusCodesList = requestData.getExpectedHttpCodes().getStatusCodes();
    HTTPStatusCodes actualReturnedCode = fromCode(response.getStatusCode());
    assertThat(expectedStatusCodesList, hasItem(actualReturnedCode));
}

假设 expectedStatusCodesList 为 {REDIRECT_FOUND} 且 actualReturnedCode 正常。

所以显然这里应该有一个异常,但是我无法理解错误信息的逻辑:

java.lang.AssertionError: 
Expected: a collection containing <OK>
     but: mismatches were: [was <REDIRECT_FOUND>]

如果是这样不是更好吗:

java.lang.AssertionError: 
Expected: a status code one of <REDIRECT_FOUND>
     but: mismatches were: [value was <OK>]

?

期望收到 REDIRECT_FOUND 但实际上我收到了 OK!

如果我理解错了,你能解释一下吗?

【问题讨论】:

    标签: java junit hamcrest


    【解决方案1】:

    assertThat() 方法的第一个参数指出,它必须是您获得的“实际”值:

    assertThat

    public static <T> void assertThat(T actual,
                                      Matcher<? super T> matcher)
    

    所以,您的actualReturnedCode 必须在前面。使用 isIn() 匹配来检查值是否在集合中:

    assertThat(actualReturnedCode, isIn(expectedStatusCodesList));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-27
      • 2021-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-05-24
      相关资源
      最近更新 更多