ech*_*hen 5 java unit-testing junit4 mockito powermock
尝试使用自定义匹配器来存储具有2个可能的调用/返回路径的类...遇到了兴趣问题.
这是我写的一个测试来说明......
这可能很难实现,但我希望ArgumentMatcher
在第二个存根时不会调用1stwhen(...).thenReturn(...)
但运行下面的代码打印foobar
在stdout上.我们可以做些什么来防止这种行为?或者我通过尝试使用多个自定义来存储单个模拟来使用错误的模式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);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑添加了评论以帮助说明
如果使用doReturn()
语法,则不调用该方法.
doReturn(null).when(file).list(argThat(new ArgumentMatcher<FilenameFilter>() {
@Override
public boolean matches(Object argument) {
System.out.println("barbar");
return true;
}
}));
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅此答案.此外,文档解释了这个用例(强调我的):
对于任何方法,您都可以使用doReturn(),[...]代替when()的相应调用.你有必要:
- stub void方法
- 间谍对象的存根方法(见下文)
- 多次使用相同的方法,在测试过程中更改模拟的行为.
归档时间: |
|
查看次数: |
686 次 |
最近记录: |