自定义hamcrest匹配器在单元测试中

时间:2013-08-11 17:07:19

标签: 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'
}

根据我能够找到的指令,可以通过确保在JUnit之前加载hamcrest类来解决这个问题。我不知道如何在Grails中实现这一点,或者如何以任何其他方式解决这个问题。

使用Grails 2.2.1

1 个答案:

答案 0 :(得分:5)

这取决于您正在使用的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之前,一个版本的hamcrest库包含在JUnit发行版中。 4.11不再是这种情况,有时您会在类版本之间出现不匹配。