让Gradle执行JUnit测试(Android应用程序,Android Studio)

3

我目前正在开发一款Android应用程序,最近从Eclipse转换到了Android Studio(不是我的想法;)。然而,我想配置一个Jenkins服务器来定期运行JUnit测试和其他测试。为了实现这个目的,我尝试配置一个gradle buildfile。以下是我的设置:

目录结构:

-app

    -src
        -main
        -test

build.gradle文件:(位于“src/build.gradle”)

    apply plugin: 'android'

    sourceSets {
        unitTest {
            java.srcDir file('src/test/java/[appName]/app')
        }
    }

    android {
        compileSdkVersion 19
        buildToolsVersion '19.0.3'

        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 19
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                runProguard false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
            }
        }
        sourceSets {
            instrumentTest.setRoot('src/test')
        }
    }

    task unitTest(type:Test) {
        testClassesDir = sourceSets.unitTest.output.classesDir
        classpath = sourceSets.unitTest.runtimeClasspath
    }

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v13:+'
        compile 'com.android.support:appcompat-v7:+'
        compile 'com.android.support:support-v4:+'

        unitTest 'junit:junit:4.10'
    }

测试类 MainActivityTest.java

    package [appName].app;

    import android.test.InstrumentationTestCase;
    import junit.framework.Assert;

    public class MainActivityTest extends InstrumentationTestCase{

        public void testMain(){
            Assert.assertEquals(1,2);
        }
    }

还有最重要的一部分,错误信息:

    Error:(41, 0) Build script error, unsupported Gradle DSL method found: 'unitTest()'!

这是我第一次使用gradle和Android Studio,我真的不知道我做错了什么。在互联网上,我只找到了遇到类似问题的人,但没有一个解决方案适用于我。如果您能指点我正确的方向,我会非常高兴!

敬礼


build.gradle 应该放在 app 中,而不是 app/src 中。否则,构建输出将会进入 app/src/build(这没有多大意义),并且 java.srcDir 路径必须被修复(相对路径始终相对于构建脚本)。此外,java.srcDir 路径不能包含包名(即它必须是 src/test/java)。代替 dependencies { unitTest ...,应该是 dependencies { unitTestCompile ...。我不确定是否仅通过应用 "android" 插件就可以获得非 Android 源集。您可能还需要额外应用 "java-base" 或 "java"。 - Peter Niederwieser
当使用“java”插件时,您可以使用预定义的test源集(和testCompile配置),而不是声明自己的。 - Peter Niederwieser
2个回答

3
错误信息提示不存在unitTest属性,测试依赖项应该使用instrumentTest(旧)或androidTest(新)进行声明。
Android SDK已经自带了junit 3的依赖性,只需删除该行即可。

1

在Android Studio中,单元测试似乎不能直接使用。经过一些微小的配置后,我有一个可用的Gradle配置,可以使用Robolectric运行单元测试。

参见:Gradletric

此外,如果要指定不同的测试文件夹,则需要使用androidTest

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

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