作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想测试调用某些 API 的代码:
public <T extends MessageLite> ApiFuture<String> publish(final T message) throws Exception {
}
public <T extends MessageLite> ApiFuture<String> publish(final T message, final ApiFutureCallback<T> futureCallback) throws Exception {
}
public <T> String publishSynchronous(final String message, final ApiFutureCallback<T> futureCallback) throws Exception {
}
在我的测试中,我使用 mockito mock,然后我想验证它是使用具有字段 isSuccess = false
我厌倦了这段代码:
verify(customPublisher, times(0)).publish(isFailureResult(), anyObject());
和这个匹配器:
public class FailResultMatcher extends TypeSafeMatcher<MessageLite> {
@Override
protected boolean matchesSafely(final MessageLite sentResult) {
return !((SdkResult)sentResult).getIsSuccess();
}
public static FailResultMatcher isFailureResult() {
return new FailResultMatcher();
}
@Override
public void describeTo(final Description description) {
}
}
但我在测试编译时遇到错误:
Error:(131, 42) java: no suitable method found for publish(com.w.sdkService.matchers.FailResultMatcher,java.lang.Object)
method linqmap.cloud.google.pubsub.CustomPublisher.<T>publish(java.lang.String,com.google.api.core.ApiFutureCallback<T>) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; com.w.sdkService.matchers.FailResultMatcher cannot be converted to java.lang.String))
method linqmap.cloud.google.pubsub.CustomPublisher.<T>publish(T) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method linqmap.cloud.google.pubsub.CustomPublisher.<T>publish(T,com.google.api.core.ApiFutureCallback<T>) is not applicable
(inferred type does not conform to upper bound(s)
inferred: com.w.sdkService.matchers.FailResultMatcher
upper bound(s): com.google.protobuf.MessageLite)
我该如何解决这个问题?
最佳答案
根据文档(Mockito 1 和 Mockito 2),您必须使用 argThat(matcher)
,这是一个允许您使用自定义参数匹配器的 Mockito 匹配器:
//stubbing
when(mock.giveMe(argThat(new MyHamcrestMatcher())));
//verification
verify(mock).giveMe(argThat(new MyHamcrestMatcher()));
你没有说你使用的是 Mockito 1 还是 2,但想法是相似的,只是静态导入不同:
import static org.mockito.Matchers.argThat;
(或者为简单起见 org.mockito.Mockito
扩展了 Matchers
)import static org.mockito.hamcrest.MockitoHamcrest.argThat;
额外提示,为了便于阅读,您可以将 times(0)
替换为 never()
,所以在你的情况下它将是:
verify(customPublisher, never()).publish(argThat(isFailureResult()), anyObject());
关于java - mockito 拒绝将 TypeSafeMatcher 与通用方法 API 配对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45331645/
这个问题在这里已经有了答案: How can I use Hamcrest to check if each element in an array of doubles is "close" to
我正在尝试使用 Rest Assured 和 TestNG 创建一个项目,但我遇到了 java.lang.NoClassDefFoundError: org/hamcrest/TypeSafeMatc
我想测试调用某些 API 的代码: public ApiFuture publish(final T message) throws Exception { } public ApiFuture
我是一名优秀的程序员,十分优秀!