- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我的一个项目中所做工作的简化版本:
List<String> names = ...
assertThat(names, is(empty()));
这在我运行在 Java 上的 Eclipse 上工作得很好 1.7.0.79
(以及 1.6.0.31
)。
但是在使用 Java 的远程系统上编译失败 1.7.0.55
(和 1.6.0.29
)这是错误消息:
no suitable method found for assertThat(java.util.List<String>,org.hamcrest.Matcher<java.util.Collection<java.lang.Object>>)
method org.hamcrest.MatcherAssert.<T>assertThat(T,org.hamcrest.Matcher<? super T>) is not applicable
(actual argument org.hamcrest.Matcher<java.util.Collection<java.lang.Object>> cannot be converted to org.hamcrest.Matcher<? super java.util.List<String>> by method invocation conversion)
method org.hamcrest.MatcherAssert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<? super T>) is not applicable
(cannot instantiate from arguments because actual and formal argument lists differ in length)
method org.hamcrest.MatcherAssert.assertThat(java.lang.String,boolean) is not applicable
(actual argument java.util.List<String> cannot be converted to java.lang.String by method invocation conversion)
我希望第一个重载变体符合我的情况,但这并不是因为看似有问题的类型推断。为什么编译器似乎认为实际参数的类型是 org.hamcrest.Matcher<java.util.Collection<java.lang.Object>>
当它显然应该是 org.hamcrest.Matcher<java.util.Collection<? extends java.lang.Object>>
知道 signatures的 is
和 empty
方法。
问题是我对我可以在远程系统上切换到哪个 JDK 的控制有限,这是一个产品。测试代码,我也不允许解决这个问题。 所以,目前我想做的只是了解问题是否是由于上述 JDK 上的错误类型推断引起的。诚然,我还没有在上述 JDK 上尝试过相同的方法还在我的个人电脑上。
我使用 hamcrest 1.3 BTW。
最佳答案
在失败的系统上构建时,似乎使用了 Hamcrest 1.2。当我使用 Hamcrest 1.2 构建您的代码时,它在使用 1.3 时失败并显示相同的错误消息。检查 Hamcrest 代码,Matchers.empty()
签名在 1.3 中已更改:
public static <E> org.hamcrest.Matcher<java.util.Collection<E>> empty() // 1.2
到
public static <E> org.hamcrest.Matcher<java.util.Collection<? extends E>> empty() // 1.3
这可以解释为什么它在 1.2 上失败但在 1.3 上有效。
您应该检查您的项目设置和系统设置失败,以确保在构建时只有 hamcrest 1.3 在类路径上。
关于java - Hamcrest assertThat - 类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34664647/
我正在使用 hamcrest 匹配器进行测试。为什么我一定要写 MatcherAssert.assertThat(a, Is.is(b)); 不仅仅是这个? assertThat(a, is(b));
import static org.junit.matchers.JUnitMatchers.both; import static org.junit.matchers.JUnitMatchers.
我是 JUnit 和 Hamcrest 的新手,希望获得最佳实践建议,以便我可以决定首先研究哪些文档。 对于初学者来说,这些 assertThat 方法中哪个更好? org.junit.Assert.
我有一个在应该失败的时候没有失败的测试: import static org.assertj.core.api.Assertions.assertThat; @Test public void tes
我想针对带日期的搜索编写测试。我正在考虑类似这样的测试代码 assertThat(repository.findByBookingDateAfter(LocalDate.of(2016, 1, 1))
什么是assertThat()方法?有什么用? 我在hadoop的mapreduce程序中看到了这种方法。有人可以解释一下吗? 最佳答案 assertThat是Assert对象中的JUnit方法之一,
我正在尝试使用 Mockito 在 Spring Boot 中进行 Junit 单元测试。 但是我收到以下错误。我无法从错误中找出问题所在代码片段: https://pastebin.com/RDUX
我的 build.gradle 文件中有以下依赖项 testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:1.9.
我有这种 JUnit 测试: @Test public void testNullCheck() { String res = someMethod(); assertThat("This
我使用 hamcrest 匹配器制作了一个测试套件,一切正常,直到我将项目移到另一台机器上。 我得到的错误是: The method assertThat(T, Matcher) in the typ
我将使用asserThat 来验证ArrayList 中对象的属性。 如果没有一个对象包含要测试的数据,我可以使用assertThat,但如果只有一个对象包含要测试的数据,我无法弄清楚如何使用asse
我从一所大学获得了一些示例代码,导入了项目并尝试运行测试:方法 assertThat(Integer, Matcher) 对于 MyClass 类型是不明确的 每个 assertThat 都被标记为红
这是一个相当简单的问题,我已经通过使用 assertEquals 解决了它,但只是想知道为什么这不起作用: assertThat(list.get(0).getStringValue().equals
这是我的一个项目中所做工作的简化版本: List names = ... assertThat(names, is(empty())); 这在我运行在 Java 上的 Eclipse 上工作得很好 1
好的,我认为这将是一个简短的问题。我有一个按日期排序的 ArrayList,当然我看到它有效,但我也想为它编写一个测试。 我想检查列表中的下一个值(日期)是否低于前一个值。我可以通过使用一些 for
如何使用 FEST assertThat(...) 方法测试类对象是否相等? 示例: import static org.fest.assertions.api.Assertions.assertTh
大家都说要用新的assertThat来自 Junit,但是,对于大字符串比较,它似乎缺少一些功能。 例子: @Test public void testAssertThat() throws Exce
此断言编译但失败,即使我知道 foo 不为 null 的事实: import static org.hamcrest.Matchers.is; // see http://stackoverflow
最初,我有这段生产代码: interface ActionSequence { public List getActions(); 我用这样的东西测试了实现该接口(interface)的类: a
我使用 assertJ 并且在我的测试用例中有多个 assertThat 断言。当第一个断言失败时,测试完成但我不希望那样。我想在单次执行测试用例后获得有关所有失败断言的信息。有什么办法吗?我在这里找
我是一名优秀的程序员,十分优秀!