ace*_*es. 7 java spring mockito
我正在使用Mockito编写代码测试.但是我被困在以下场景中--A类有2个方法,method1()和method2().我尝试使用ArgumentCaptor来捕获发送到method2()的值.但是,由于我使用@Spy,我不能使用Matchers.
我如何测试method1()?
class A{
B b;
method1(arg1, arg2){
//some logic
method2(arg1, arg2, ....argN);
}
method2(arg1, arg2,....argN){
//some logic
b.method3(arg1, arg2...);
}
}
Run Code Online (Sandbox Code Playgroud)
如何验证method2是否收到相同的参数值?以下是我写的测试类:
Class TestA{
@Mock
B b;
@Spy
@InjectMocks //required else b is null
A a = new A();
@Test
public void testMethod1(){
a.method1(arg1, arg2);
//How to verify method2 receives same argument values (arg1, arg2)????
//verify(a, times(1)).method2(.......);
}
Run Code Online (Sandbox Code Playgroud)
}
我被这篇文章和@David留下的评论所吸引,所以我决定为像我一样的人编写一个有效的例子
/*
* class to test
*/
public class A {
public void methodA(String str) {
this.methodB(str);
}
protected void methodB(String str) {
// some implementation
}
}
Run Code Online (Sandbox Code Playgroud)
我们想断言传递给methodB()的值是我们所期望的.阅读ArgumentCaptor让我发现了等效的Captor Annotation
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.verify;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class MultipleMethodCallTest {
@Spy
A a = new A();
@Captor ArgumentCaptor<String> captor;
@Test
public void captureSecondMethodCallArgument() throws Exception {
// EXPECTED
String greeting = "hello world";
// PERFORM TEST
a.methodA(greeting);
// ASSERT
verify(a).methodB(captor.capture());
assertEquals(greeting, captor.getValue());
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子进行了测试
归档时间: |
|
查看次数: |
17985 次 |
最近记录: |