java - Hamcrest assertThat 在移动项目时不起作用

标签 java unit-testing junit hamcrest

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

我得到的错误是:

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

我为什么会收到它以及如何修复有什么想法吗?

此外,并非所有 assertThat 遇到的错误都出现,有些被认为是正确的,即使它们有 double 匹配器......

最佳答案

首先,您应该说明您遇到的错误是在编译时发生的,而不是在运行时发生的。问题是 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));

关于java - Hamcrest assertThat 在移动项目时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24955999/

相关文章:

java - 更快的哈希函数

java - 当程序从另一个目录运行时 DriverManager.getConnection 不起作用

unit-testing - ReactJS 中的 Enzyme 未定义组件/属性的测试

java - 如何在 Maven 中组装多模块项目

JavaScript 模拟函数在测试中返回未定义

c# - 如何在 Microsoft Graph API 中为 UpdateAsync 编写服务测试(在单个请求中将多个成员添加到组)

android - 如何在 android 中进行普通的 vanilla junit 测试?做的时候出错

java - ArrayList 相等 JUnit 测试

java - 使用 PowerMockito 模拟私有(private)方法

java - 在javafx中的TextField中显示 float