Android 프로젝트에서 Java 코드를 테스트하기 위해 Junit 테스트를 설정하려고합니다. Gradle 빌드에서 작동하지 않는 것 같습니다.
지금은 하나의 테스트를 예로 설정했습니다. 내 프로젝트는 Gradle을 사용하기 위해 이식 한 레거시이므로 파일을 새 디렉터리 형식으로 이동하는 대신 소스 세트와 구조를 정의했습니다.
빌드를 실행하거나 UnitTest를 실행하면 출력이 Build Successful이되지만 실제로 테스트 단위 테스트를 실행하지는 않았습니다. Android 스튜디오는 파일을 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로 시작하는 클래스 만 테스트 스위트에 포함되도록 필터를 설정했습니다. 이러한 테스트 클래스에 다음 주석을 추가해야합니다. (작성된 내용과 다를 수 있으므로 매니페스트 파일의 URL을 변경해야합니다.)
@RunWith(RobolectricTestRunner.class)
@Config(manifest = "./src/main/AndroidManifest.xml", emulateSdk = 18)
class FirstTest {
// tests go here
}
마지막으로 ./gradlew test로 테스트를 실행합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다