Итак, я изо всех сил старался изо дня в день пытаться заставить Mockito работать в моем проекте Android. Я добавил все в файл сборки Gradle:
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'
и попробовали запустить тест, который на самом деле ничего не делает:
@RunWith(MockitoJUnitRunner.class)
public class LoginActivityTest extends
ActivityInstrumentationTestCase2<LoginActivity> {
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));
}
}
Причина, по которой я хочу издеваться над сервисом, заключается в том, что я хочу, чтобы часть сети прошла тест. Нет необходимости посылать сетевой запрос на простой тест, не так ли?
Во всяком случае, приложение создается, но когда начинается фактический тест, он терпит неудачу (или, скорее, сбой) с помощью 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)
Это выглядит как нечетное, так как класс SpiceManager
не содержит методов abstract
.
Это, однако, часть какого-то пакета, который я не писал (com.octo.android.robospice
). Но это не должно быть проблемой. Должен ли он?
И если это проблема, как я могу отказаться от факторинга из любых тестов? Я хочу проверить работу приложения, а не сетевое подключение...