testing - 如何为所有重要的测试库编写匹配器?

标签 testing jvm matcher hamcrest

我目前正在扩展 Degraph检查是否违反依赖规则。

到目前为止,我已经为 ScalaTest 创建了匹配器,因为这是我最喜欢的 JVM 测试库。但许多其他人更喜欢或不得不使用其他库。所以我也想为这些提供匹配器(或任何合适的等价物)。

另一方面,我很懒惰,所以我不想为每个可以想到的库提供一个匹配器。

所以问题是:

是否有某种匹配器库可以在所有(或大多数/许多)测试库中使用?或者可能是将 Hamcrest 匹配器转换为所有其他库的匹配器的包装器?

我想支持的库(按重要性排序):

  • JUnit
  • Scala测试
  • 最流行的 Groovy 测试库
  • 最流行的 Clojure 测试库
  • 规范2
  • 测试NG

最佳答案

  1. 我见过的每个单元测试框架都会因测试失败而引发异常。
  2. Hamcrest 的 assertThat(T value, Matcher<T> matcher)会抛出 AssertionError如果matcher.matches(value)返回 false .

因此,Hamcrest 应该开箱即用地适用于大多数测试框架。对于其他库,例如构建模拟对象,您需要使用 Hamcrest 的 Matcher native 对象或编写集成层。一种方法是创建一个方法来装饰任何匹配器,例如*,

ArgumentMatcher<T> decorate(final Matcher<T> matcher) {
    return new ArgumentMatcher() {
        public boolean <T> accepts(T value) {
            return matcher.matches(value);
        }
    }
}

* 这是一个使用理论 Mocking API 的人为示例。

关于testing - 如何为所有重要的测试库编写匹配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701629/

相关文章:

security - Grails 和运行时动态修改

Java 正则表达式未按预期工作

python - 向 sdist 添加测试,但不安装

.net - 最佳 JIT 优化

java - 给jvm添加内存

javascript - 有没有办法在自定义匹配器中使用 Jasmine 默认匹配器?

具有固定开始和重复 block 的字符串的Java正则表达式

java - Gradle 测试 - 为失败的测试打印 stdout/stderror

c# - 使用集线器对广播消息进行信号量表测试

r - R 中的 Scheffe 测试