我正试图将Hamcrest匹配器引入到我的团队的一些代码中。为了消除匹配实例集合的复杂性,我想为我的每个匹配器编写一个帮助器方法,我希望匹配的集合。所以本质上,我是在包装容器InAnyOrder。也就是说,如果有人以null作为预期和实际传递,我希望它匹配。但是按照我编写代码的方式,如果为预期传递null,它将抛出一个NullPointerExcION。所以我想返回一个IsNull匹配器,如果null被传递到预期的。这是我的示例代码:
/**
* Matches all Foo objects in an order agnostic manner.
* @param expected The collection of Foo objects to be matched.
* @return A matcher that will match a collection of Foos
*/
@SuppressWarnings("unchecked")
public static Matcher<Iterable<? extends Foo>> matchesAllfoos(Collection<Foo> expected)
{
if (expected == null)
{
// Doesn't work because Matcher<Iterable> is not a Matcher<Iterable<? extends Foo>>
return nullValue(Iterable.class);
}
// The cast is here to provide a hint to Java as to which overloaded method to choose.
// See http://stackoverflow.com/questions/18614621/conflicting-overloads-for-hamcrest-matcher
return containsInAnyOrder((Collection)Collections2.transform(expected, FOO_TO_MATCHER));
}
那么,我如何完成我想做的事情呢?使用nullValue()不起作用,因为它希望我返回Matcher。强制转换nullValue(Iterable.class)不起作用。有什么想法吗?
如果仔细观察,nullValue(Class
因此,如果您打电话:
public static <T> Matcher<T> nullValue(Class<T> type) {
return new IsNull<T>();
}
最后(由于泛型很难解决,因为您无法计算出潜在的null对象的运行时类),您可以直接调用构造函数:
new IsNull<Iterable<? extends Foo>>();
因此,解决方案是只使用它,而不使用
nullValue()
实用程序方法:
/**
* Matches all Foo objects in an order agnostic manner.
* @param expected The collection of Foo objects to be matched.
* @return A matcher that will match a collection of Foos
*/
@SuppressWarnings("unchecked")
public static Matcher<Iterable<? extends Foo>> matchesAllfoos(Collection<Foo> expected)
{
if (expected == null)
{
return new IsNull<Iterable<? extends Foo>>();
}
// The cast is here to provide a hint to Java as to which overloaded method to choose.
// See http://stackoverflow.com/questions/18614621/conflicting-overloads-for-hamcrest-matcher
return containsInAnyOrder((Collection)Collections2.transform(expected, FOO_TO_MATCHER));
}
问题内容: 我正在尝试匹配模式: 以下仅匹配第一次出现的情况: 结果是: 但是,[使用pythex似乎可以正常工作](http://pythex.org/?regex=%3C–(%5B%5Cw%5Cs%5D%2B)–%3E(%5B%5Cs%5CS%5D*%3F)(%3F%3D%5Cn%3C–%7C%24)&test_string=%3C–%20Option%201%20–%3E%0ANice%20
可与一起使用,以检查给定属性的值,例如: 当name是一个属性时,这很好,即:有一个名为的方法。 是否有匹配器将检查不是属性的方法?ie:在这种情况下,它将检查集合中项的方法的返回值,而不是。
我正在编写一些JUnit/Akruillian类测试,用Hibernate测试一些持久性方法。因此,我必须从数据库中获取许多Hibernate实体列表,并且为了更好地编写测试,我正在使用JUnit Hamcrest框架。在这一刻,我想使用组合匹配器,特别是其中之一。我知道我可以用方法替换它,但出于代码易读性的原因,我更喜欢组合匹配器。我不明白如何使用
我有一个接口,它提供了一个方法,返回一个,其中包含一个
我有一个正在测试的方法,它返回一个对象列表。。。例如“Person”对象。 我有一个“预期的最后名字”列表来验证结果。 我目前有一个工作测试,它循环遍历“expectedLastNames”中的名称,并断言每个名称都包含在“Person”对象列表中。与此类似(请注意,以下代码段位于Kotlin中): 当断言通过时,这非常有效,并验证了我的方法。然而,当测试失败时,这是非常麻烦的,因为一旦遇到缺少的
问题内容: 给定一个或项,是否有任何(或匹配项的组合)断言每个项都匹配一个? 例如,给定此项目类型: 我想写一个断言,表示s 集合中的所有项目都具有特定值。我在想这样的事情: 没有自己写匹配器,有什么办法吗? 问题答案: 使用匹配器。 Hamcrest还提供了一种快捷方式。 完整的例子