等效的Mockito任何非空约束

问题描述 投票:3回答:3

我正在编写过去几天的测试用例。我想知道是否有任何等效的org.mockito.Matchers.any没有空约束?

我的意思是,如果你说:

when(reviewBuilder.saveReviewModel(any())).thenReturn(2L);

然后saveReviewModel可以采取任何对象,包括null。有没有办法只将非空对象传递给使用Mockito 1.10.19库的方法?

java unit-testing mockito powermock
3个回答
3
投票

您可以编写将通过此条件的自定义匹配器。

 class NotNullObjects extends ArgumentMatcher<Review> {
     public boolean matches(Object object) {
         return object!=null;
     }
 }

然后使用

when(reviewBuilder.saveReviewModel(argThat(new NotNullObjects()))).thenReturn(2L);

我的一个建议是考虑一些你可以期待的接口作为你的方法的输入。


1
投票

在Mockito 1.9.5中有isNotNull()isNotNull(java.lang.Class clazz)进行空检查。

从版本2.1.0开始,anyX()和任何(SomeType.class)匹配器拒绝空值并检查类型。有关Mockito 2页面中的新内容,请参阅Incompatible changes with 1.10段落。


0
投票

如果您在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)

    // ...
© www.soinside.com 2019 - 2024. All rights reserved.