我使用 hamcrest 匹配器制作了一个测试套件,一切正常,直到我将项目移到另一台机器上。
我得到的错误是:
The method assertThat(T, Matcher<? super T>) in the type MatcherAssert is not applicable
for the arguments (Object, Matcher<Double>)
我为什么会收到它以及如何修复有什么想法吗?
此外,并非所有 assertThat 遇到的错误都出现,有些被认为是正确的,即使它们有 double 匹配器......
最佳答案
首先,您应该说明您遇到的错误是在编译时发生的,而不是在运行时发生的。问题是 Double
不是 Object
的 super
。所以你调用 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));
关于java - Hamcrest assertThat 在移动项目时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955999/