尝试使用自定义匹配器将类固执/返回路径固执...遇到了兴趣问题。
这是我写的测试,以说明...
这可能很难实现,但是我预计当第一个when(...).thenReturn(...)
ArgumentMatcher
不会被调用。但在下面运行代码在Stdout上打印foobar
。我们可以做些什么来防止这种行为?或者,我是通过尝试与多个自定义ArgumentMatcher
fyi - powermock
在我的类Path上进行其他测试(不确定这是否重要,但我确实在堆栈跟踪中看到了)
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);
}
}
编辑添加了注释以帮助说明
如果使用 doReturn()
语法,则该方法未调用。
doReturn(null).when(file).list(argThat(new ArgumentMatcher<FilenameFilter>() {
@Override
public boolean matches(Object argument) {
System.out.println("barbar");
return true;
}
}));
有关更多详细信息,请参见此答案。另外,文档解释了此用例(重点是我的):
对于任何方法,您可以使用doreturn(),[...]代替对应的调用。当您:
时,有必要
- 存根空白方法
- 间谍对象上的存根方法(见下文)
- 存根不止一次,以在测试中间更改模拟的行为。