【问题标题】:Hamcrest assertThat doesnt work when project is movedHamcrest assertThat 在项目移动时不起作用
【发布时间】:2014-07-25 12:36:22
【问题描述】:

我已经使用 hamcrest 匹配器制作了一个测试套件,一切正常,直到我将项目移到另一台机器上。

我得到的错误是:

The method assertThat(T, Matcher<? super T>) in the type MatcherAssert is not applicable  
for the arguments (Object, Matcher<Double>)

任何想法为什么我得到它以及如何解决?

此外,所有 assertThat 遇到的错误都不会出现,有些被认为是正确的,即使它们有匹配器的双精度...

【问题讨论】:

  • 忘了说我知道这个错误是什么意思,只是不知道为什么我得到它......
  • 简单地说,您需要找出两种环境之间的不同之处。我首先要看的是 JVM 版本。你是在第二台机器上重新编译,还是只运行预编译的代码?
  • 据我所知,JVM 是相同的。是的,我重新编译,至少……

标签: java unit-testing junit hamcrest


【解决方案1】:

首先,您应该说明您得到的错误是在编译时而不是运行时。问题在于Double 不是Objectsuper。因此,您调用 assertThat(someObject, someDoubleMatcher) 在编译时不符合所需的签名。但是,这在运行时可以正常工作,因为 Matcher 将检查类型。

可以选择...

// cast expected to object so that created matcher is Matcher<Object>
assertThat(myObject, CoreMatchers.equalTo((Object)myDouble));

// cast actual value to double so that both value and matcher are Double
assertThat((Double)myObject, equalTo(myDouble));

// cast Matcher to raw type so generics will be ignored
assertThat(myObject, (Matcher) equalTo(myDouble));

【讨论】:

  • 非常感谢,这已解决!还要感谢关于说它是编译时错误而不是运行时错误的提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-18
  • 1970-01-01
  • 2014-12-25
  • 2017-09-02
相关资源
最近更新 更多