繁体   English   中英

具有非空约束的 Mockito any 等价物

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM