【发布时间】:2017-04-17 17:14:08
【问题描述】:
尝试使用自定义 Matcher 对具有 2 个可能的调用/返回路径的类进行存根...遇到了一个兴趣问题。
这是我写的一个测试来说明......
这可能很难实现,但我希望在存根第二个 when(...).thenReturn(...) 时不会调用第一个 ArgumentMatcher
但运行下面的代码会在标准输出上打印foobar。我们能做些什么来防止这种行为吗?或者我是否通过尝试使用多个自定义 ArgumentMatcher 存根单个模拟来使用错误的模式@
仅供参考 - 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添加了 cmets 来帮助说明
【问题讨论】:
标签: java unit-testing mockito junit4 powermock