问题标签 [hamcrest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2218 浏览

java - 为什么 IsIterableContainingInOrder Hamcrest 匹配器无法使用数组?

我显然对如何使用 HamcrestIsIterableContainingInOrder来验证 List 相等性而不仅仅是使用.equals(). 我想在我的报告中看到 Hamcrest 的有用信息。

为什么下面的测试甚至无法编译?他们中的一些人比其他人更违反直觉,至少对我来说是这样。我认为,我得到的一般原则是类型参数将被推断为我传递给具有可变参数签名的方法的内容,因此它将 T 的数组视为 T 的可变参数,因此将基于 T 而不是基于T 的数组,T 的可迭代,或类似的东西。

我可以解释一下,为什么一些最直观的行实际上甚至无法编译。

特别:

  • 3和4展示了array/List的不对称性
  • 5 和 6 表明我可以查看列表而不是数组(?)

标记为这样的行上的编译器警告对我来说更加神秘。



大量的惊讶。:(


PS我意识到所有的惊讶都来自我自己的无知,没有别的。我应该复习泛型、类型推断、可变参数等。我真的可以对此进行彻底的解释,并且我可能会在以后多次回顾它。

PPS我确实尝试过先阅读代码,但看了一下......;)不是为了装腔作势:

0 投票
5 回答
38664 浏览

java - 使用已弃用的 Hamcrest 方法 is() 的替代方法是什么?

我现在使用下面的代码来断言一个boolean值,但是该方法org.hamcrest.Matchers.is()已被弃用。

是否有一个简单的替代语法来测试布尔值而不求助于assertTrue()它会给你像“java.lang.AssertionError”这样的糟糕的失败消息


收到评论/答案后编辑

我最初的担忧是因为 Eclipse 将以下导入语句显示为已弃用

在此处输入图像描述

查看Hamcrest API文档时,该方法有 3 个重载变体,is()其中只有一个已弃用。

因此,为了澄清@mark 的评论和@matt 的答案is(),我在上面发布的使用是有效的并且不被弃用。

0 投票
4 回答
24579 浏览

java - 使用 between 比较 Hamcrest 数

Hamcrest 有没有办法比较一个数字范围内的数字?我正在寻找这样的东西:

0 投票
3 回答
6104 浏览

java - JUnit Matcher#startsWith 的声明在哪里?

我正在浏览junitExpectedExceptions的 javadoc,但我无法理解startsWith他们示例中的 来自哪里(在代码中标记为 HERE)。我检查了CoreMatcher实用程序类,但找不到任何静态startsWith方法。

该方法位于何处?

(我显然可以自己写,但这不是重点)

0 投票
2 回答
3873 浏览

java - 泛型地狱:hamcrest 匹配器作为方法参数

所以,让我们有一个字符串列表和一个函数,它接受一个 Hamcrest 匹配器并返回matches()提供的匹配器方法的结果:

到目前为止,一切都很好。现在我可以轻松调用:

...因为所有这些工厂静态方法都会生成适合方法签名的匹配器Matcher<? super List<String>>

但是,我相信接受 Iterable 对象的匹配器也应该被该matchIt()方法接受:

所以我天真地改变了matchIt()方法签名:

但它根本不起作用。不仅不接受everyItem(anything()),甚至不接受之前正确的everyItem(equalToIgnoringCase("item"))说法(1.7.0_05编译器版本):

什么?那么这里有什么问题呢?是matchIt()方法签名还是everyItem()Hamcrest 签名设计错误?还是只是 Java 泛型系统无法修复?非常感谢您的评论!

编辑@rlegendi 我的目的是为客户端提供一个接口,以添加和执行关于列表的谓词。这就是matchIt()方法。在这种情况下调用matchIt(anything())是有意义的,客户端想知道列表是否是任何东西。调用matchIt(empty())意味着客户端想知道列表是否为空。反之亦然。matchIt(everyItem(equalToIgnoringCase("item")))_matchIt(hasItem("item"))

我的目标是尽可能获得最佳 matchIt()方法签名。对于Matcher<? super List<String>>之前的所有场景都可以正常工作。但是,我相信客户端也应该被允许添加Matcher<Iterable<Object>>匹配器(例如matchIt(everyItem(notNullValue()),这里非常有意义,客户端想知道列表中的每个 String 项是否不为空)。

但是我找不到正确的签名,matchIt(Matcher<? super List<? super String>>)不适用于everyItem(notNullValue());

我使用 Hamcrest 1.3。

编辑2:

我相信我已经找到了我的根本误解。

everyItem(anything())表达式返回一个类型为 的对象Matcher<Iterable<Object>>。所以我可以轻松做到Matcher<Iterable<Object>> m = everyItem(anything());

但是我不明白为什么我不能这样做Matcher<? super List<? super String>> m1 = m;。似乎Matcher<Iterable<Object>>不是Matcher<? super List<? super String>>,但我不明白为什么。

我什至做不到Matcher<? super List<?>> m1 = m;Matcher<Iterable<Object>>不是Matcher<? super List<?>>吗?为什么?

0 投票
1 回答
927 浏览

scala - Specs2:使用 Hamcrest 匹配器

对于用 Java 编写的域对象,我有大量的 Hamcrest 匹配器。我现在正在迁移到 Scala,并希望在 specs2 测试的上下文中重用这些现有的匹配器。

给定 Foo 类的 Hamcrest 匹配器:

我希望能够这样使用它:

等等。

Specs2 似乎有相反的情况,它的 Matcher[T] 特征到 org.hamcrest.Matcher 的适配器,但我正在寻找相反的方式。

有任何想法吗?

0 投票
1 回答
3464 浏览

java - 如何将 lambdaj 与 hamcrest 匹配器 (hasItemsInArray) 一起使用来过滤列表

我正在尝试通过 lambdaj 过滤在供应商数组中找到的 caroffers 对象列表。但是下面的代码不起作用。我得到空列表。

下面的代码在哪里起作用。只有 equalTo 似乎对我有用。

请帮我。

0 投票
1 回答
5150 浏览

java - IDEA、Hamcrest 和静态导入

我的 Maven 项目包括

当我输入assertThat..

我想让 IDEA 弄清楚需要以下内容

相反,我得到了这个。

在此处输入图像描述

这怎么能纠正?如何让 IDEA 执行静态导入?

0 投票
1 回答
1449 浏览

arrays - 如何断言集合中的每个项目都在范围内

我有一个 Groovy 数组,它将获得一组随机整数值。我想断言数组中的每个项目在给定范围内都有一个值。我正在尝试使用 Hamcrest Matchers。所以我的测试看起来像这样:

当我运行测试时,我得到一个 assertionError

我已经尝试了一些变体,但我没有通过测试。只需查看错误的“But:was”部分,我就可以看到所有 6 个值都符合要求,但测试仍然失败。

我很长时间没有使用 Groovy 或 Hamcrest,所以我确定我错过了一些东西。谢谢

0 投票
2 回答
2996 浏览

java - 断言,为空或者是特定类的实例

我以为很简单

所以我想 ensre next() 返回两个之一,NULL 或 Double 的实例。某事喜欢

测试运行 ( assertThat) 结果...

为什么?以及如何解决?

编辑

你是对的,与来自 Mockito 的 hamcrest lib 发生了冲突。我已经修好了。没有错误,但断言奇怪地失败了,看看:

Null 是预期的,得到 null 并且测试失败。