最近,我为jaxb生成的元素做了一个自定义匹配器,遇到了这样的场景:
先决条件:
当断言失败时,结果是:
Expected: not myMatchersDescribeToDescription
but: isNotCoreMatcherDescribeMismatchDescription
挖掘组织的代码。汉克雷斯特。果心IsNot类我可以看出describeTo的实现是正确的(即,将描述的收集委托给包装的匹配器),但是DescribeMatch没有被覆盖,因此使用了BaseMatcher的版本。
恕我直言,这是一个错误的行为,因为不匹配也应该从包装的匹配器中提取。你们觉得怎么样,伙计们?
你从哪里得到的描述不匹配
应该在匹配器中重载?
Matcher
界面指定match
和descripbeto
(通过selfdescription
)。因此,Hamcrest框架不会试图通过匹配器
获取实际对象的描述,而只是匹配器
本身的描述。
我不知道为什么这被否决了。我同意这是错误的行为。似乎与这个问题类似
您只能通过创建自己的自定义“notD”匹配器来修复它,它是IsNot
匹配器的副本,添加了descripebematch
的覆盖:
import org.hamcrest.BaseMatcher;
import org.hamcrest.Description;
import org.hamcrest.Factory;
import org.hamcrest.Matcher;
import static org.hamcrest.core.IsEqual.equalTo;
/**
* Calculates the logical negation of a matcher.
*/
public class IsNotDescribing<T> extends BaseMatcher<T> {
private final Matcher<T> matcher;
public IsNotDescribing(Matcher<T> matcher) {
this.matcher = matcher;
}
@Override
public boolean matches(Object arg) {
return !matcher.matches(arg);
}
@Override
public void describeTo(Description description) {
description.appendText("not ").appendDescriptionOf(matcher);
}
// use the matcher to describe its mismatch
@Override
public void describeMismatch(Object item, Description description) {
matcher.describeMismatch(item, description);
}
@Factory
public static <T> Matcher<T> notD(Matcher<T> matcher) {
return new IsNotDescribing<T>(matcher);
}
@Factory
public static <T> Matcher<T> notD(T value) {
return notD(equalTo(value));
}
}
我的问题是:这是一个bug还是我遗漏了什么? 事实上,不同的匹配器以不同的格式返回消息是一个很大的问题,因为我试图编写一些自定义的验证框架,该框架使用匹配器,并且能够在出现任何错误时返回良好的人类可读的消息。我似乎不能为此目的使用方法...
我的密码应类似于: “密码应包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,长度至少为八个字符” 我使用的模式是:
我可以使用哪种匹配器? { test: /\.js$/, loader: 'babel-loader' } - Matches just .js { test: /\.(js|jsx)$/, loader: 'babel-loader' } - Matches both js and jsx Generally put it's just a JavaScript regex so standar
我正在为我的 REST API 控制器编写测试,我需要检查返回的 对象中的 值,请参阅此测试方法: 但是测试产生了这个错误: 似乎ID被正确返回,但被序列化为不同的结构。 我的代码有什么问题?
我试图更新一个实体与OneToOne关系使用restful Web服务。 我使用自定义查询,但它不工作 错误: java.lang.的参数值[2]不匹配预期的类型[com.mezoo.tdc.model.ActivityType(n/a)] 活动豆 豆子 它是可能的更新没有自定义查询?我想使用下面的POST请求: {"uuid":"9d9fa946-ee6e-408e-9e8a-7a9786a1d
它打印出值的等效,这是因为这一行: 通过调用表示。 那么,如何使Hibernate相信是的实例? 我的枚举是由加载的。而由URLClassLoader加载,由另一个类加载器加载。