gpt4 book ai didi

android - 使用 Gradle 在 Android 中使用 JUnit 进行单元测试

转载 作者:行者123 更新时间:2023-11-30 02:42:31 25 4
gpt4 key购买 nike

我正在尝试设置 Junit 测试以在 Android 项目中测试我的 Java 代码。我似乎无法让它与 Gradle 构建一起工作。

我暂时设置了一个测试作为示例。我的项目是遗留项目,我将其移植为使用 Gradle,因此我定义了源集和结构,而不是将文件移动到新的目录格式中。

当我运行构建或仅运行 UnitTest 时,输出为构建成功,但实际上并没有运行我的测试单元测试。 Android Studio 似乎也没有将该文件识别为 java,并且没有在我的 ExampleTest.java 文件中显示错误/代码完成。

Project
-> Module
-> assets
-> build
-> gen
-> libs
-> res
-> src
-> tests

我的 gradle 构建文件:

    buildscript {
repositories {
mavenCentral()
maven { url 'http://repo1.maven.org/maven2' }
maven { url 'http://download.crashlytics.com/maven' }
}
dependencies {
classpath 'com.android.tools.build:gradle:+'
classpath 'com.crashlytics.tools.gradle:crashlytics-gradle:1.+'
}
}

apply plugin: 'android'
apply plugin: 'crashlytics'

repositories {
mavenCentral()
}

android {
compileSdkVersion 20
buildToolsVersion '20.0.0'


defaultConfig {
minSdkVersion 10
targetSdkVersion 20
versionCode 47
versionName '2.1'

}
buildTypes {
release {
runProguard true
zipAlign true
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
proguardFile 'proguard-project.txt'
}
debug {
runProguard false
}
}

productFlavors {
defaultFlavor {
proguardFile 'proguard-project.txt'
}
}

signingConfigs {
debug {
storeFile file('../debug.keystore')
}

release {
storeFile file("XX")
storePassword "XX"
keyAlias "XX"
keyPassword "XX"
}
}

sourceSets {

main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']

}

unitTest {
java.srcDir file('tests')
resources.srcDir file('test/resources')
}

}
}


sourceSets {
unitTest {
java.srcDir file('test')
resources.srcDir file('test/resources')
}
}

dependencies {
compile 'com.viewpagerindicator:library:2.4.1@aar'
compile 'com.crashlytics.android:crashlytics:1.+'
unitTestCompile 'junit:junit:4.1+'
unitTestCompile files("$buildDir/intermediates/classes/debug")
}


configurations {
unitTestCompile.extendsFrom runtime
unitTestRuntime.extendsFrom unitTestCompile
}

task unitTest(type:Test, dependsOn: assemble) {
description = "run unit tests"
testClassesDir = project.sourceSets.unitTest.output.classesDir
classpath = project.sourceSets.unitTest.runtimeClasspath
}


// bind to check
build.dependsOn unitTest

最佳答案

对您的 gradle 脚本执行以下操作。这将允许您在 JVM 中运行测试,这意味着不必运行模拟器或在设备上运行测试。

在顶部:

buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.robolectric:robolectric-gradle-plugin:0.12.+'
}
}

新插件:

apply plugin: 'robolectric'

靠近底部:

robolectric {

//configure the set of classes for JUnit tests
include '**/*Test.class'

//configure whether failing tests should fail the build
ignoreFailures false

}

并添加如下依赖:

androidTestCompile ('junit:junit:4.11')
androidTestCompile ('org.robolectric:robolectric:2.3') {
exclude module: 'classworlds'
exclude module: 'maven-artifact'
exclude module: 'maven-artifact-manager'
exclude module: 'maven-error-diagnostics'
exclude module: 'maven-model'
exclude module: 'maven-plugin-registry'
exclude module: 'maven-profile'
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'
exclude group: 'com.android.support', module: 'support-v4'
}

然后开始在测试文件夹中编写测试。如您所见,我设置了一个过滤器,因此只有以 Test.class 开头的类才会包含在测试套件中。请务必在这些测试类中的任何一个上添加以下注释:(请务必更改 list 文件的 url,因为它与您编写的内容不同)

@RunWith(RobolectricTestRunner.class)
@Config(manifest = "./src/main/AndroidManifest.xml", emulateSdk = 18)
class FirstTest {
// tests go here
}

最后,使用 ./gradlew test 运行测试

关于android - 使用 Gradle 在 Android 中使用 JUnit 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com