[英]Equivalent of Mockito any with not null constraint
我正在编写最近几天的测试用例。 我想知道是否有任何等效的org.mockito.Matchers.any
具有非空约束?
我的意思是如果你说:
when(reviewBuilder.saveReviewModel(any())).thenReturn(2L);
然后saveReviewModel
可以接受任何对象,包括null
。 有没有办法只将非空对象传递给使用 Mockito 1.10.19 库的方法?
您可以编写将通过此条件的自定义匹配器。
class NotNullObjects extends ArgumentMatcher<Review> {
public boolean matches(Object object) {
return object!=null;
}
}
然后使用
when(reviewBuilder.saveReviewModel(argThat(new NotNullObjects()))).thenReturn(2L);
我的一个建议是考虑一些你可以期待的界面作为你的方法的输入。
在 Mockito 1.9.5 中有isNotNull()和isNotNull(java.lang.Class clazz)进行空检查。
从版本 2.1.0 anyX() 和 any(SomeType.class) 匹配器拒绝空值并检查类型。 请参阅Mockito 2 中的新增功能页面上的与 1.10段不兼容的更改。
如果您在verify
方法调用中指定参数的预期类型,这将起作用:
import static org.junit.Assert.fail;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
public class MockitoNotNullTest {
private static class Dependency1 {
}
private static class Dependency2 {
public void doesNotAcceptNull(Dependency1 d) {
}
}
private static class ClassUnderTest {
private final Dependency2 d2;
public ClassUnderTest(Dependency2 d2) {
this.d2 = d2;
}
public void passesNull() {
d2.doesNotAcceptNull(null);
}
}
@Rule
public MockitoRule mockitoRule = MockitoJUnit.rule();
@Mock
Dependency2 d2;
@Test
public void passesNull_callsD1WithNull_verifyFails() {
ClassUnderTest classUnderTest = new ClassUnderTest(d2);
classUnderTest.passesNull();
// fails as expected
Mockito.verify(d2).doesNotAcceptNull(Mockito.any(Dependency1.class));
}
}
结果是:
Argument(s) are different! Wanted:
d2.doesNotAcceptNull(
<any stackoverflow.MockitoNotNullTest.Dependency1>
);
-> at stackoverflow.MockitoNotNullTest.passesNull_callsD1WithNull_verifyFails(MockitoNotNullTest.java:48)
Actual invocation has different arguments:
d2.doesNotAcceptNull(
null
);
-> at stackoverflow.MockitoNotNullTest$ClassUnderTest.passesNull(MockitoNotNullTest.java:32)
// ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.