Тест Robolectric работает в Android Studio, но не с помощью градиента в консоли

Недавно я обновил несколько библиотек в своем файле gradle, и в результате некоторые (но не все) мои модульные тесты терпят неудачу, когда я запускаю их в консоли с помощью «./gradlew clean test». Тем не менее, все мои тесты успешно проходят, когда я запускаю их в Android Studio.

Вот снимок моего файла градиента:

apply plugin: 'com.android.application' apply plugin: 'android-aspectj' apply plugin: 'android' apply plugin: 'idea' apply plugin: 'org.robolectric' android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { minSdkVersion 17 targetSdkVersion 19 } signingConfigs { release { ... } } sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] } test.setRoot("src/test") } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' signingConfig signingConfigs.release } debug { ... } } lintOptions { abortOnError false } testOptions { unitTests.returnDefaultValues = true } packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' } } buildscript { repositories { mavenCentral() mavenLocal() jcenter() maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } } dependencies { classpath 'com.github.dcendents:android-maven-plugin:1.0' classpath 'com.uphyca.gradle:gradle-android-aspectj-plugin:0.9.+' classpath 'org.robolectric:robolectric-gradle-plugin:1.0.1' } } dependencies { compile 'com.android.support:support-v4:22.1.1' compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.google.android.gms:play-services:7.3.0' compile 'org.apache.httpcomponents:httpcore:4.3' compile 'org.apache.httpcomponents:httpmime:4.3.5' compile 'org.apache.httpcomponents:httpclient:4.3.5' compile 'com.google.code.gson:gson:2.3' testCompile 'org.hamcrest:hamcrest-integration:1.3' testCompile 'org.hamcrest:hamcrest-core:1.3' testCompile 'org.hamcrest:hamcrest-library:1.3' testCompile 'com.squareup:fest-android:1.0.+' testCompile 'org.mockito:mockito-core:1.+' testCompile 'org.jmockit:jmockit:1.8' testCompile('junit:junit:4.12') { exclude module: 'hamcrest-core' } testCompile('org.robolectric:robolectric:2.4') { exclude module: 'classworlds' exclude module: 'commons-logging' exclude module: 'httpclient' exclude module: 'maven-artifact' exclude module: 'maven-artifact-manager' exclude module: 'maven-error-diagnostics' exclude module: 'maven-model' exclude module: 'maven-project' exclude module: 'maven-settings' exclude module: 'nekohtml' exclude module: 'plexus-container-default' exclude module: 'plexus-interpolation' exclude module: 'plexus-utils' exclude module: 'wagon-file' exclude module: 'wagon-http-lightweight' exclude module: 'wagon-http-shared' exclude module: 'wagon-provider-api' } } idea { module { testOutputDir = file("build/test-classes") testSourceDirs += file('test/') } } 

Ошибка, которую я получаю, такова:

 java.lang.NullPointerException at mockit.internal.mockups.MockStates.getMockState(MockStates.java:99) at mockit.internal.mockups.MockStates.updateMockState(MockStates.java:92) at mockit.internal.state.TestRun.updateMockState(TestRun.java:138) at org.junit.runners.model.FrameworkMethod.validatePublicVoidNoArg(FrameworkMethod.java) at org.junit.runners.ParentRunner.validatePublicVoidNoArgMethods(ParentRunner.java:155) at org.junit.runners.BlockJUnit4ClassRunner.validateTestMethods(BlockJUnit4ClassRunner.java:208) at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:188) at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128) at org.junit.runners.ParentRunner.validate(ParentRunner.java:416) 

Мой пользовательский RobolectricGradleTestRunner:

 public class RobolectricGradleTestRunner extends RobolectricTestRunner { private static final int MAX_SDK_SUPPORTED_BY_ROBOLECTRIC = 18; public RobolectricGradleTestRunner(Class<?> testClass) throws InitializationError { super(testClass); } @Override protected AndroidManifest getAppManifest(Config config) { String dir = System.getProperty("user.dir"); String manifestProperty = dir + "/build/intermediates/manifests/full/debug/AndroidManifest.xml"; String resProperty = dir + "/build/intermediates/res/debug"; return new AndroidManifest(Fs.fileFromPath(manifestProperty), Fs.fileFromPath(resProperty)) { @Override public int getTargetSdkVersion() { return MAX_SDK_SUPPORTED_BY_ROBOLECTRIC; } }; } } 

И это один из моих тестов, который терпит неудачу:

 @RunWith(RobolectricGradleTestRunner.class) public class AboutActivityTest { private AboutActivity activity; @Before public void initialize() { activity = Robolectric.buildActivity(AboutActivity.class).create().start().get(); } @Test public void testAboutPage() { assertNotNull("AboutActivity is null", activity); Fragment fragment = activity.getFragmentManager().findFragmentByTag(AboutFragment.FRAGMENT_TAG); assertNotNull("fragment is null", fragment); Button button = (Button) fragment.getView().findViewById(R.id.buttonTour); assertNotNull("Tour button is null", button); ShadowActivity shadowHome = Robolectric.shadowOf(activity); button.performClick(); assertThat(shadowHome.peekNextStartedActivityForResult().intent.getComponent(), equalTo(new ComponentName(activity, TourActivity.class))); } } 

Основываясь на том, что я вижу, кажется, что jmockit имеет некоторые проблемы для инициализации. Но я не уверен, что это такое. Любая помощь приветствуется.

Intereting Posts
Исключить abi из apk Transcode / Конвертировать видео в Mp4 на Android Каков самый большой html-файл, который можно загрузить в Android WebView? Макет деятельности: класс фрагмента: vs android: атрибуты имени Android IllegalStateException Не зарегистрировано ни одного инструментария! Должен работать под регистрирующим оборудованием Использование протокола DIAL в приложении для Android ClassCastException: android.support.v7.widget.LinearLayoutCompat $ LayoutParams нельзя отбрасывать в android.widget.LinearLayout $ LayoutParams Google Glass не входит в число Android-устройств от ADB Android Calendar API вставляет повторяющееся событие Потеря оповещения Разрешение доступа после перезагрузки Как подключить клиент Android к локальному серверу Apache (php) внутри моего ноутбука? Firebase Big query – Как получить данные из таблицы пользовательских событий Изменение значка панели действий ImageView не поддерживает максимальную высоту и ширину Нужна помощь, связанная с Неустранимым Исключением, вызванным java.lang.IncompatibleClassChangeError