Попытка заглушить класс двумя возможными способами обращения/возврата с использованием пользовательского Matcher ... столкнулась с проблемой интереса.Mockito, считая stubbing как вызов
Вот тест, который я написал, чтобы показать ...
Это может быть трудно реализовать, но я бы ожидал, что первый ArgumentMatcher
не вызывается, когда гася второй when(...).thenReturn(...)
Но выполнение кода ниже печатает foobar
на stdout. Есть ли что-то, что мы можем сделать, чтобы предотвратить такое поведение? Или я использую неправильный шаблон, пытаясь окурок один макет с несколькими обычая ArgumentMatcher
FYI - powermock
на моем пути к классам для других тестов (не уверен, если это имеет значение, но я вижу в трассировке стека)
import org.junit.Test;
import org.mockito.ArgumentMatcher;
import java.io.File;
import java.io.FilenameFilter;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class MyTest {
@Test
public void name() throws Exception {
File file = mock(File.class);
when(file.list(argThat(new ArgumentMatcher<FilenameFilter>() {
@Override
public boolean matches(Object argument) {
System.out.println("foobar");
return 1 + 1 >2;
}
}))).thenReturn(null);
// at this point, mockito will attempt to run the previous matcher, treating this stub code as invocation ... and printing out 'foobar'
when(file.list(argThat(new ArgumentMatcher<FilenameFilter>() {
@Override
public boolean matches(Object argument) {
System.out.println("barbar");
return true;
}
}))).thenReturn(null);
}
}
комментарии EDIT добавил, чтобы проиллюстрировать
спасибо за это – echen