在 Grails 中实现自定义 hamcrest 匹配器时遇到问题。使用我的匹配器运行测试失败,并显示:
java.lang.NoSuchMethodError: org.hamcrest.Matcher.describeMismatch(Ljava/lang/Object;Lorg/hamcrest/Description;)V
经过一番谷歌搜索后,这似乎是由加载库的顺序引起的:JUnit 和 Hamcrest。我已将以下依赖项添加到我的 BuildConfig.groovy 中:
dependencies {
test 'org.hamcrest:hamcrest-all:1.3'
}
根据我找到的说明,可以通过确保 hamcrest 类在 JUnit 类之前加载来解决此问题。我不知道如何在 Grails 中实现这一点,也不知道如何以任何其他方式解决这个问题。
使用 Grails 2.2.1
最佳答案
这取决于您使用的 JUnit 版本。您可以通过查看 lib/junit/junit/jars 来检查这一点。我认为默认是 4.10。如果是这样,请升级到4.11。我相信您可以通过在 BuildConfig.groovy 中明确指定它来做到这一点:
dependencies {
test 'junit:junit:4.11'
test 'org.hamcrest:hamcrest-all:1.3'
}
作为解释,在 4.11 之前,JUnit 发行版中包含了 hamcrest 库的一个版本。 4.11 中不再出现这种情况,有时您会遇到类版本之间不匹配的情况。
关于grails - 单元测试中的自定义 hamcrest 匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18174471/