I separated retrofit api calls methods from the activity code and I want to do a unit test on these methods, one example: The interface:
public interface LoginService { @GET("/auth") public void basicLogin(Callback<AuthObject> response); } and this is the method that do the call, in the main activity I get the object by the event bus.
public class AuthAPI { private Bus bus; LoginService loginService; public AuthAPI(String username, String password) { this.bus = BusProvider.getInstance().getBus(); loginService = ServiceGenerator.createService(LoginService.class, CommonUtils.BASE_URL, username, password); } public void Login() { loginService.basicLogin(new Callback<AuthObject>() { @Override public void success(AuthObject authObject, Response response) { bus.post(authObject); } @Override public void failure(RetrofitError error) { AuthObject authObject = new AuthObject(); authObject.setError(true); bus.post(authObject); } }); } } And here the test
@RunWith(MockitoJUnitRunner.class) public class AuthCallTest extends TestCase { AuthAPI authAPI; @Mock private LoginService mockApi; @Captor private ArgumentCaptor<Callback<AuthObject>> cb; @Before public void setUp() throws Exception { authAPI = new AuthAPI("username", "password"); MockitoAnnotations.initMocks(this); } @Test public void testLogin() throws Exception { Mockito.verify(mockApi).basicLogin((cb.capture())); AuthObject authObject = new AuthObject(); cb.getValue().success(authObject, null); assertEquals(authObject.isError(), false); } } when I launch the test I have this error
Wanted but not invoked: mockApi.basicLogin(<Capturing argument>); -> at AuthCallTest.testLogin(AuthCallTest.java:42) Actually, there were zero interactions with this mock. What I did wrong, this is driving me crazy I tried to follow this guide without success: http://www.mdswanson.com/blog/2013/12/16/reliable-android-http-testing-with-retrofit-and-mockito.html
someone help me :(