对于类A
;
public class A {
Integer value;
Integer rate;
Boolean checked;
}
我正在构建这样的自定义Matcher;
Matchers.has项目(allOf(hasProperty(value, equalTo(value)), hasProperty(price, equalTo(price)))
检查a
列表是否包含中“value”==value的列表
我的问题是,当我将
Boolean
type属性checked
作为约束合并到此匹配器时,它总是失败,错误消息为属性“checked”不可读。
匹配器。hasItems(allOf(hasProperty(“value”),equalTo(value)),hasProperty(“rate”,equalTo(rate)),hasProperty(“checked”,equalTo(checked)))
它是否与布尔类型字段的getter方法具有
Is
前缀而不是get
有关,如果它不是boolean
类型字段,则可能是Hamcrest无法为getter使用Is
前缀。
另外,我应该补充的是,我不能修改类
A
的结构,因此我只能使用布尔类型字段。
没有人回答这个问题,但我在propertyOn
方法中做了一个小小的修改,实现了我自己的HasPropertyWithValue
类,其中is生成给定bean和属性名称的PropertyDescriptor
。
private Condition<PropertyDescriptor> propertyOn(T bean, Description mismatch) {
PropertyDescriptor property = PropertyUtil.getPropertyDescriptor(propertyName, bean);
if (property != null) {
if (property.getReadMethod() == null && property.getPropertyType().equals(Boolean.class)) {
String booleanGetter = "is" propertyName.substring(0, 1).toUpperCase() propertyName.substring(1);
for(Method method : bean.getClass().getDeclaredMethods()) {
if (method.getName().equals(booleanGetter)) {
try {
property.setReadMethod(method);
} catch (IntrospectionException e) {
throw new IllegalStateException("Cannot set read method" e);
}
}
}
}
} else {
mismatch.appendText("No property \"" + propertyName + "\"");
return notMatched();
}
return matched(property, mismatch);
}
其中,在创建PropertyDescriptor
之后,其中is具有nullreadMethod
。我使用Java反射获得正确的布尔getter方法,该方法以is
前缀开头,并将其作为readMethod
添加到属性中。这解决了这个问题,但方式如此丑陋。
我还在GitHub中为Hamcrest
项目创建了一个pull请求;https://github.com/hamcrest/JavaHamcrest/pull/136
问题所在 我目前正在尝试使用Hamcrest匹配器来断言返回的列表类型是特定类型。例如,假设我的服务调用返回了以下列表: null 使用Hamcrest匹配器,是否有一种方法可以断言空列表是某种类型的参数化的(例如)?
它看起来像hamcrest(尽管看起来,还有更多)。为什么我会选择使用(除了看起来类稍微小一点之外),为什么这两个类如此相似?
问题内容: 如何将整数转换为布尔值? 问题答案: 尝试使用此返回 或仅使用布尔值开始(使用更好的名称): 它继续使我迷惑人们为什么使用-可怕的变量名。看起来并不传达任何意义。
我的问题是:这是一个bug还是我遗漏了什么? 事实上,不同的匹配器以不同的格式返回消息是一个很大的问题,因为我试图编写一些自定义的验证框架,该框架使用匹配器,并且能够在出现任何错误时返回良好的人类可读的消息。我似乎不能为此目的使用方法...
我想在TestNG测试中使用Hamcrest匹配器,特别是软断言。我怎么能这么做?我知道我可以在测试中使用Hamcrest的断言,例如:
错误 线程“main”java.lang.Error:未解决的编译问题:类型不匹配:无法从Scanner转换为boolean类型不匹配:无法在converter.main(converter.java:14)处从int转换为Scanner