【问题标题】:Spock & Spock Reports: how "catch" and customize the error message for AssertionError?Spock & Spock Reports:如何“捕获”并自定义 AssertionError 的错误消息?
【发布时间】:2016-02-24 16:14:37
【问题描述】:

我正在与:

  • Spock 核心
  • Spock 报告
  • 斯波克弹簧
  • Spring MVC 测试

我有以下代码:

@FailsWith(java.lang.AssertionError.class)
def "findAll() Not Expected"(){

    given:

        url =  PersonaUrlHelper.FINDALL;

    when: 

        resultActions = mockMvc.perform(get(url)).andDo(print())

    then: 

        resultActions.andExpect(status().isOk())
                     .andExpect(content().contentType(MediaType.APPLICATION_XML))


}

这里的代码失败(预期如何),因为被测试的方法真的返回(MediaType.APPLICATION_JSON)而不是(MediaType.APPLICATION_XML)

所以@FailsWith(java.lang.AssertionError.class)的原因。

即使我使用 @FailsWith(value=java.lang.AssertionError.class, reason="JSON returned ..."),我也无法通过 Spock 报告

看到 reason

问题一:我如何在 Spock 报告上看到 reason?。

我知道 Spock 提供 throw() 方法,因此我可以这样做:

  then:
        def e = thrown(IllegalArgumentException)
        e.message == "Some expected error message"
        println e.message

遗憾的是 throw 不适用于 AssertionError。

如果我使用thrown(AssertionError),测试方法不会通过,唯一的方法是通过@FailsWith,但我无法从 AssertionError 获取错误消息

问题二如何从 AssertionError 中获取错误信息

我知道我可以做类似的事情

then: "Something to show on Spock Reports"

只是好奇第二个问题能​​不能解决..

【问题讨论】:

    标签: testing integration-testing spock spring-mvc-test spock-reports


    【解决方案1】:

    关于问题一

    如果您查看FailsWithExtension#visitFeatureAnnotation,您会看到只有来自@FailsWith 的值被评估,reason 根本没有被触及。您可以做的是介绍您自己的注释类型(自定义类型,例如与@FailsWith 相同)并覆盖AbstractAnnotationDrivenExtension#visitFeatureAnnotation。在那里你可以访问reason 参数。

    关于问题二

    请看这个链接:http://spock-framework.3207229.n2.nabble.com/Validate-exception-message-with-FailsWith-td7573288.html

    另外,也许您可​​以覆盖 AbstractAnnotationDrivenExtension#visitSpec 并添加自定义侦听器(覆盖 AbstractRunListener)。然后您可以访问AbstractRunListener#error 方法,其文档显示:

    为规范运行期间发生的每个错误调用。可以为同一个方法多次调用,例如,如果两者 * 特征方法的expect-block和cleanup-block失败。

    没有测试问题二,但它可能有效。我用过类似的东西。

    享受,

    汤米

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2019-10-07
      • 2020-04-25
      • 2020-10-25
      • 2021-10-06
      • 2020-07-04
      • 2012-11-24
      相关资源
      最近更新 更多