grails - 单元测试中的自定义 hamcrest 匹配器

标签 grails junit classloader hamcrest matcher

在 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/

相关文章:

grails - 自动将新的Grails版本添加到Jenkins Grails

tomcat - Grails 数据表和 Tomcat 选择不起作用

ant - junit 和 ant 问题。无法开始测试

opengl - 在 headless (headless)LibGDX单元测试中创建纹理

java - 您如何模拟您尝试使用 JUnit + Mockito 进行单元测试的服务中使用的类

java - Java 类加载器安全模型

java - 是否可以创建指向内存中对象的 URL?

grails - Grails具有许多条件和标准无法按预期运行

maven - Grails 2.5.0 Maven构建问题

java - 通过反射创建时将对象转换为接口(interface)