I am using Mockito to write tests for code. However I am stuck at following scenario –
Class A has 2 methods, method1() and method2(). I tried using ArgumentCaptor to catch values sent to method2(). But, since I am using @Spy, I cannot use Matchers.
How do I test method1()?
class A{
B b;
method1(arg1, arg2){
//some logic
method2(arg1, arg2, ....argN);
}
method2(arg1, arg2,....argN){
//some logic
b.method3(arg1, arg2...);
}
}
How to verify method2 receives same argument values?
Following is the test class I wrote:
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(.......);
}
}
I was intrigued by this post and the comments left by @David so I decided to code a working example for those who follow like me
We want to assert that the value being passed into methodB() is what we expect. Reading up on the ArgumentCaptor led me to discover the equivalent Captor Annotation
This example was tested with