作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题最好用一个简单的例子来描述。这是我的类(class):
public class App
{
void doFirst(String s){
if(s.equals("hello")){
return;
}
doSecond(s);
}
void doSecond(String s){
}
}
这是我的测试:
public void testApp() {
App a = spy(new App());
ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class);
doNothing().when(a).doSecond(argument.capture());
a.doFirst("bye");
assertEquals("bye", argument.getValue());
a.doFirst("hello");
assertEquals(null, argument.getValue());
}
问题在于第二个断言失败,因为 argument.getValue() 具有之前调用 doFirst 的值。我能否在第一次断言后以某种方式清除参数,以便在到达第二个断言时它将为空?
谢谢。
最佳答案
在我看来你正在测试两种不同的条件 -
s
不是 "hello"
时,doSecond
会使用正确的参数调用doSecond
不会被调用,当 s
是 "hello"
那应该是两个独立的测试。
另外,不要使用 ArgumentCaptor
和 assertEquals
。这就是 verify
的用途。您可以像这样编写测试类。
@RunWith(MockitoJUnitRunner.class)
public class AppTest {
@Spy App toTest;
@Test
public void doSecondIsCalledWhenArgumentIsNotHello() {
toTest.doFirst("bye");
verify(toTest).doSecond("bye");
}
@Test
public void doSecondIsNotCalledWhenArgumentIsHello() {
toTest.doFirst("hello");
verify(toTest, never()).doSecond(anyString());
}
}
关于java - Mockito - 明确的论点捕获者公关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21317757/
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: How to use R's ellipsis feature when writing your own func
当我尝试指定我想要 pull 最新版本的 pod 时,根据 Cocoapods official docs ,我将它列在我的 podfile 中,如下所示: pod 'ReactiveCocoa',
我是一名优秀的程序员,十分优秀!