我想检查使用realtimeUpdate
调用模拟的时间currentTime
字段等于某些LocalDateTime
:
我想使用自定义匹配器运行此类代码:
verify(mockServerApi).sendUpdate(new TimeMatcher().isTimeEqual(update, localDateTime2));
但是当我尝试使用此自定义匹配器运行时出现编译错误。
我该如何解决这个问题?
public class TimeMatcher {
public Matcher<RealtimeUpdate> isTimeEqual(RealtimeUpdate realtimeUpdate, final LocalDateTime localDateTime) {
return new BaseMatcher<RealtimeUpdate>() {
@Override
public boolean matches(final Object item) {
final RealtimeUpdate realtimeUpdate = (RealtimeUpdate) item;
return realtimeUpdate.currentTime.equalTo(localDateTime);
}
这是方法签名
void sendRealTimeUpdate(RealtimeUpdate realtimeUpdate);
这是编译错误:
答案 0 :(得分:1)
以下是您可以继续的方式
课程TimeMatcher
,您只需要LocalDateTime
public class TimeMatcher {
public static Matcher<RealtimeUpdate> isTimeEqual(final LocalDateTime localDateTime) {
return new BaseMatcher<RealtimeUpdate>() {
@Override
public void describeTo(final Description description) {
description.appendText("Date doesn't match with "+ localDateTime);
}
@Override
public boolean matches(final Object item) {
final RealtimeUpdate realtimeUpdate = (RealtimeUpdate) item;
return realtimeUpdate.currentTime.isEqual(localDateTime);
}
};
}
}
测试:
Mockito.verify(mockRoutingServerApi).sendRealTimeUpdate(
new ThreadSafeMockingProgress().getArgumentMatcherStorage()
.reportMatcher(TimeMatcher.isTimeEqual(localDateTime2))
.returnFor(RealtimeUpdate.class));
您需要使用returnFor
提供RealtimeUpdate
预期的sendRealTimeUpdate
参数类型
这相当于:
Mockito.verify(mockRoutingServerApi).sendRealTimeUpdate(
Matchers.argThat(TimeMatcher.isTimeEqual(localDateTime2))
);