Robolectric 테스트를 새로운 Gradle Android 빌드 시스템과 함께 실행하려고하는데, 주 프로젝트의 리소스에 액세스 할 수 없습니다. Robolectric with Gradle : 리소스를 찾을 수 없습니다.
은 내가java
과
android
Gradle을 플러그인 간의 충돌을 방지하기 위해 두 개의 별도의 프로젝트로 빌드를 분할, 그래서 디렉토리 구조는 다음과 거의 같습니다
.
├── build.gradle
├── settings.gradle
├── mainproject
│ ├── build
│ │ ├── classes
│ │ │ └── debug
│ ├── build.gradle
│ └── src
│ └── main
│ ├── AndroidManifest.xml
│ └── ...
└── test
├── build.gradle
└── src
└── test
└── java
└── ...
└── test
├── MainActivityTest.java
├── Runner.java
├── ServerTestCase.java
└── StatusFetcherTest.java
내 test/
에서 build.gradle
은 다음과 같습니다
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.stanfy.android:gradle-plugin-java-robolectric:2.0'
}
}
apply plugin: 'java-robolectric'
repositories {...}
javarob {
packageName = 'com.example.mainproject'
}
test {
dependsOn ':mainproject:build'
scanForTestClasses = false
include "**/*Test.class"
// Oh, the humanity!
def srcDir = project(':mainproject').android.sourceSets.main.java.srcDirs.toArray()[0].getAbsolutePath()
workingDir srcDir.substring(0, srcDir.lastIndexOf('/'))
}
project(':mainproject').android.sourceSets.main.java.srcDirs.each {dir ->
def buildDir = dir.getAbsolutePath().split('/')
buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')
sourceSets.test.compileClasspath += files(buildDir)
sourceSets.test.runtimeClasspath += files(buildDir)
}
dependencies {
testCompile group: 'com.google.android', name: 'android', version: '4.1.1.4'
testCompile group: 'org.robolectric', name: 'robolectric', version: '2.0-alpha-3'
...
}
악의적 인 classpath hackery는 R
을 제외하고 내 주 프로젝트의 모든 클래스에 액세스 할 수 있습니다.빌드 디렉토리에 272,파일 만은 compileTestJava
작업하는 동안이 오류가 발생합니다 :
/.../MainActivityTest.java:16: error: cannot find symbol
final String appName = activity.getResources().getString(R.string.app_name);
^
symbol: variable string
location: class R
1 error
:test:compileTestJava FAILED
바로, 새로운 빌드 시스템 Robolectric 테스트를 실행하는 더 나은 방법이 있어야합니다?
나는 이것이 작동하지 않을 것이라고 생각합니다.robolectric에는 내부 리소스가있어 실제 리소스를 찾을 수있는 곳 (예 : 종속성으로 프로젝트를 확장 할 수있는 영역)은 gradle 플러그인의 역할과 관련이 있습니다. 호환 가능하도록 Robolectric 개발자와 협력해야합니다. 할일 목록에 있습니다. –
@av 입력에 감사드립니다. – passy
새로운 Android Studio ide에서 grado를 사용하여 robolectric을 실행하는 방법이 있습니까? – Imanol