2017-01-15 5 views
2

Я пишу тестовые примеры из последних нескольких дней. Я хочу знать, есть ли какой-либо эквивалент org.mockito.Matchers.any с ненулевым ограничением?Эквивалент Mockito с неопределенным ограничением

Я имею в виду, если вы скажете:

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

Тогда saveReviewModel может принимать какие-либо объекты, в том числе null. Есть ли способ передать только не нулевые объекты методу, используя библиотеку Mockito 1.10.19?

+0

Это Mockito 1.10.19. – user3681970

ответ

3

Вы можете написать свой пользовательский соединитель, который пройдет это условие.

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

Тогда использование

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

Мой один совет, чтобы думать о какой-то интерфейс, который вы можете ожидать там, как на вход вашего метода.

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) 

    // ...