【发布时间】:2014-06-04 08:05:49
【问题描述】:
我有一堂课:
public class MyCustomObject {
private String field1;
private String field2;
}
我创建了 MyCustomObject 数组:
MyCustomObject[] array = new MyCustomObject[]{new MyCustomObject()};
我的目标是使用 hamcrest 匹配器验证这个数组的元素。我尝试了以下方法:
assertThat(array, allOf(hasItemInArray(hasProperty("field1", equalTo("value1")))), hasItemInArray(hasProperty("field2", equalTo("value2")))));
但不幸的是它不起作用。
自定义对象数组可以通过何种方式进行验证?
【问题讨论】:
-
究竟是什么不起作用?你会期待什么?当您说容量时,您是指数组的大小/长度吗?如果是这样,为什么不检查一下?
-
我无法使用我的自定义对象验证哪些元素包含数组。这个想法是直接使用上面指定的类来验证名称和值字段。
-
这不是一个好的设计。 hamcrest 和 BDD 的整体理念是测试读起来像规范。这读起来就像您正在检查类元数据,而不是类的功能。
-
如果您想要验证,请不要使用 hamcrest。使用 if 和 instanceof 检查您的约束,如果不满足则抛出异常。 Hamcrest 和 Junit 用于单元测试,而不是运行时参数验证。
-
你能澄清一下“它不起作用”吗?编译器错误?假阳性/阴性?在这种情况下(玩具代码),您应该将其拆分为两个断言。