So I've been struggling pretty much all day trying to get Mockito to work for my Android project. I added everything to my Gradle build file:
androidTestCompile 'org.mockito:mockito-core:2.0.29-beta' androidTestCompile "junit:junit:4.12-beta-3" androidTestCompile 'com.google.dexmaker:dexmaker:1.2' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2'
and have tried running a test that doesn't really do anything:
@RunWith(MockitoJUnitRunner.class) public class LoginActivityTest extends ActivityInstrumentationTestCase2 { private LoginActivity loginActivity; private EditText et_email; private EditText et_password; private Button btn_login; @Mock SpiceManager manager; public LoginActivityTest(){ super(LoginActivity.class); } @Override public void setUp() throws Exception { super.setUp(); loginActivity = getActivity(); MockitoAnnotations.initMocks(this); //manager = mock(SpiceManager.class); loginActivity.spiceManager = manager; et_email = (EditText) loginActivity.findViewById(R.id.et_email); et_password = (EditText) loginActivity.findViewById(R.id.et_password); btn_login = (Button) loginActivity.findViewById(R.id.btn_login); } @Override public void tearDown() throws Exception { super.tearDown(); } public void testLoginEmpty() throws Exception { verify(manager).execute( any(LoginRequest.class), anyString(), anyLong(), any(LoginActivity.LoginRequestListener.class)); } }
The reason I want to mock the service is because I would like to keep the network part out the test. There's no need to actually send a network request for a simple test, right?
Anyhow, the app builds but when the actual test starts running it fails (or rather crashes) with an AbstractMethodError
:
Running tests Test running started java.lang.AbstractMethodError: abstract method "org.mockito.plugins.MockMaker$TypeMockability org.mockito.plugins.MockMaker.isTypeMockable(java.lang.Class)" at org.mockito.internal.util.MockUtil.typeMockabilityOf(MockUtil.java:26) at org.mockito.internal.util.MockCreationValidator.validateType(MockCreationValidator.java:21) at org.mockito.internal.creation.MockSettingsImpl.validatedSettings(MockSettingsImpl.java:167) at org.mockito.internal.creation.MockSettingsImpl.confirm(MockSettingsImpl.java:161) at org.mockito.internal.MockitoCore.mock(MockitoCore.java:58) at org.mockito.Mockito.mock(Mockito.java:1410) at org.mockito.Mockito.mock(Mockito.java:1288) at be.sanmax.membr.activities.LoginActivityTest.setUp(LoginActivityTest.java:50) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1837)
This strikes me as odd since the SpiceManager
class does not contain any abstract
methods. It is, however, part of some package that I didn't write (com.octo.android.robospice
). But that shouldn't be an issue. Should it?
And if that is the issue, how could I go about factoring it out from any tests? I only want to test the working of the app, not the network connection...