我想测试一个对象的特定字段是否匹配我指定的值。在这种情况下,它是 S3Bucket 对象中的存储桶名称。据我所知,我需要为此编写一个自定义匹配器:
mockery.checking(new Expectations() {{
one(query.s3).getObject(with(
new BaseMatcher<S3Bucket>() {
@Override
public boolean matches(Object item) {
if (item instanceof S3Bucket) {
return ((S3Bucket)item).getName().equals("bucket");
} else {
return false;
}
}
@Override
public void describeTo(Description description) {
description.appendText("Bucket name isn't \"bucket\"");
}
}), with(equal("key")));
...
}});
如果有更简单的方法来做到这一点就好了,比如:
mockery.checking(new Expectations() {{
one(query.s3).getObject(
with(equal(methodOf(S3Bucket.class).getName(), "bucket")),
with(equal("key")));
...
}});
任何人都可以指出类似的东西吗?我想我已经在这种情况下解决了我的问题,但这不是我第一次希望有一种更简单的方法。
最佳答案
或者,对于类型更安全的版本,有 FeatureMatcher。在这种情况下,类似于:
private Matcher<S3Bucket> bucketName(final String expected) {
return new FeatureMatcher<S3Bucket, String>(equalTo(expected),
"bucket called", "name") {
String featureValueOf(S3Bucket actual) {
return actual.getName();
}
};
}
给予:
mockery.checking(new Expectations() {{
one(query.s3).getObject(with(bucketName("bucket")), with(equalTo("key")));
...
}});
两个字符串参数的目的是使不匹配报告易于阅读。
关于java - 有没有一种使用 Hamcrest 匹配字段的简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5033526/