我目前正在扩展 Degraph检查是否违反依赖规则。
到目前为止,我已经为 ScalaTest 创建了匹配器,因为这是我最喜欢的 JVM 测试库。但许多其他人更喜欢或不得不使用其他库。所以我也想为这些提供匹配器(或任何合适的等价物)。
另一方面,我很懒惰,所以我不想为每个可以想到的库提供一个匹配器。
所以问题是:
是否有某种匹配器库可以在所有(或大多数/许多)测试库中使用?或者可能是将 Hamcrest 匹配器转换为所有其他库的匹配器的包装器?
我想支持的库(按重要性排序):
- JUnit
- Scala测试
- 最流行的 Groovy 测试库
- 最流行的 Clojure 测试库
- 规范2
- 测试NG
最佳答案
- 我见过的每个单元测试框架都会因测试失败而引发异常。
- 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/