Robolectric + Gradle在初始化测试时失败

5

我无法使用Robolectric执行测试,当我尝试执行测试时:

./gradlew test

I get the following exception:

com.Makeupalley.test.HomeRobolectricTest > initializationError FAILED
java.lang.NoClassDefFoundError
    Caused by: java.lang.ClassNotFoundException

java.lang.NoClassDefFoundError: android/app/Activity
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
.
.
.
Caused by: java.lang.ClassNotFoundException: android.app.Activity
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

任何断言失败时,测试都会像这样失败:assertTrue(true)。

这是我的build.gradle文件:

buildscript {
    repositories {
        mavenCentral()
        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
    }
     dependencies {
         classpath 'com.android.tools.build:gradle:0.12.+'
         classpath 'org.robolectric:robolectric-gradle-plugin:0.12.+'

    }
}

...

dependencies {
    compile('junit:junit:4.11') {
        exclude module: 'hamcrest-core'
    }

 compile('org.robolectric:robolectric:2.3') {
        exclude module: 'classworlds'
        exclude module: 'commons-logging'
        exclude module: 'httpclient'
        ...
    }    
}

测试文件:

@Config(emulateSdk = 18)
@RunWith(RobolectricTestRunner.class)
public class HomeRobolectricTest {
    private TestActivity activity;

    public HomeRobolectricTest(){}

    @Before
    public void setup()  {
        activity = Robolectric.buildActivity(TestActivity.class).create().get();
    }

    @Test
    public void testInstanceActivity() throws Exception {
        assertTrue(true);
    }

...
}

有人能帮助我或给我一些指导吗?

如果您需要更多信息或所有build.gradle文件,请告诉我。

build.gradle文件: https://gist.github.com/anonymous/d0f0bac71a0fb76f8454

谢谢

更新 - Android部分

android {

    compileSdkVersion 15
    buildToolsVersion '19.1.0'

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 15
        versionCode 45
        versionName "1.4.210"
        testInstrumentationRunner     "com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner"
    }

    buildTypes {
        release {
            runProguard true
            proguardFile 'proguard-project.txt'
        }
        debug {
            runProguard false
            testCoverageEnabled = true
        }
    }

    signingConfigs {

    }

    packagingOptions {
        exclude 'META-INF/INDEX.LIST'
        exclude 'META-INF/INDEX'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
    }

    sourceSets {
        androidTest {
            setRoot('src/test')
        }
    }

    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

我有一种感觉,这可能与测试时使用compile而不是testCompile有关。看看这个网站,看看它是否有帮助:http://www.peterfriese.de/android-testing-with-robolectric/ - EpicPandaForce
1
你的build.gradle文件中有Android部分吗? - Eugen Martynov
感谢你的帮助。我使用了“androidTestCompile”而不是“compile”,但异常仍然存在。我不能使用“testCompile”,因为我会收到以下错误: 构建脚本错误,发现不支持的Gradle DSL方法:“testCompile()”!可能的原因是:-您正在使用缺少该方法的Gradle版本... - jam0ral3s
我发布安卓部分。 - jam0ral3s
1
你是否忘记了 apply plugin 'robolectric'?在此之后,你可以将 compile 更改为 testCompile - Eugen Martynov
另一个问题是,为什么你的目标SDK是15,但却试图模拟SDK 18。这不应该会有什么影响,但我注意到了。 - Eugen Martynov
2个回答

0

自从Android Gradle插件版本1.1.0以来,支持单元测试,因此您可以在Gradle文件中使用testCompile。通过settings>gradle>experimental打开它并更新Gradle插件版本:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
    }
}

0

我有以下的设置:

app/build.gradle

dependencies {
    testCompile 'junit:junit:4.12'
    testCompile "org.mockito:mockito-core:1.9.5"
    testCompile "org.robolectric:robolectric:2.4"
}

在 Gradle 2.5 版本之前,它对我也不起作用。由于他们几天前发布了新版本 2.5,我尝试了一下,它确实解决了我的问题。

gradle/wrapper/gradle-wrapper.prooperties

#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.5-all.zip

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接