我想运行这行代码:
assertThat(contextPin.get(), equalTo(pinPage.getPinObjFromUi()));
但我想打印到日志中提供信息
意思是我可以知道哪些字段不相等。
所以我想过要实现一个匹配器。
我用Google搜索了,但无法正确编写
因为我的方法无法将actual
和expected
个对象放在一起。
这是我的代码:
我怎么写得干净?
public class PinMatcher extends TypeSafeMatcher<Pin> {
private Pin actual;
private Object item;
public PinMatcher(Pin actual) {
this.actual = actual;
}
@Override
protected boolean matchesSafely(Pin item) {
return false;
}
@Override
public void describeTo(Description description) {
}
//cannot override this way
@Override
public boolean matches(Object item){
assertThat(actual.title, equalTo(expected.title));
return true;
}
//cannot access actual when called like this:
// assertThat(contextPin.get(), new PinMatcher.pinMatches(pinPage.getPinObjFromUi()));
@Override
public boolean pinMatches(Object item){
assertThat(actual.title, equalTo(expected.title));
return true;
}
}
答案 0 :(得分:4)
尝试更像这样的事情:
package com.mycompany.core;
import org.hamcrest.Description;
import org.hamcrest.TypeSafeMatcher;
public class PinMatcher extends TypeSafeMatcher<Pin> {
private Pin actual;
public PinMatcher(Pin actual) {
this.actual = actual;
}
@Override
protected boolean matchesSafely(Pin item) {
return actual.title.equals(item.title);
}
@Override
public void describeTo(Description description) {
description.appendText("should match title ").appendText(actual.title);
}
}
答案 1 :(得分:2)
您的匹配应在构造函数中收到expected
,并将其与传递给item
的“实际值”matchesSafely
参数进行比较。您不应该覆盖matches
。
这将符合assertThat
期望的内容:
assertThat(actual, matcher-using-expected);
我认为基于字符串的匹配器是类型安全的,并且会提供一个很好的例子。