Android Studio 단위 테스트 : 데이터 (입력) 파일 읽기
단위 테스트에서 경로를 하드 코딩하지 않고 내 (데스크톱) 파일 시스템의 json 파일에서 데이터를 어떻게 읽을 수 있습니까?
정적 문자열을 생성하는 대신 파일에서 테스트 입력 (내 구문 분석 방법에 대한)을 읽고 싶습니다.
파일은 내 단위 테스트 코드와 같은 위치에 있지만 필요한 경우 프로젝트의 다른 위치에 배치 할 수도 있습니다. Android Studio를 사용하고 있습니다.
android-gradle-plugin
버전 에 따라 :
1. 버전 1.5 이상 :
json 파일을 넣고 다음 src/test/resources/test.json
과 같이 참조하십시오.
classLoader.getResource("test.json").
gradle 수정이 필요하지 않습니다.
2. 1.5 미만 버전 : (또는 위의 솔루션이 작동하지 않는 경우)
Android Gradle 플러그인 버전 1.1 이상을 사용하고 있는지 확인하세요 . 링크를 따라 Android Studio를 올바르게 설정하십시오.
test
디렉터리를 만듭니다 . 단위 테스트 클래스를java
디렉터리에 넣고 리소스 파일을res
디렉터리에 넣습니다 . Android Studio는 다음과 같이 표시해야합니다.gradle
리소스를 클래스 디렉토리에 복사하여 다음에 대해 볼 수 있도록 작업을 만듭니다classloader
.android{ ... } task copyResDirectoryToClasses(type: Copy){ from "${projectDir}/src/test/res" into "${buildDir}/intermediates/classes/test/debug/res" } assembleDebug.dependsOn(copyResDirectoryToClasses)
이제이 메서드를 사용
File
하여 파일 리소스에 대한 참조 를 가져올 수 있습니다.private static File getFileFromPath(Object obj, String fileName) { ClassLoader classLoader = obj.getClass().getClassLoader(); URL resource = classLoader.getResource(fileName); return new File(resource.getPath()); } @Test public void fileObjectShouldNotBeNull() throws Exception { File file = getFileFromPath(this, "res/test.json"); assertThat(file, notNullValue()); }
- 전체 클래스 또는 특정 테스트 방법에서 Ctrl+ Shift+로 단위 테스트를 실행 F10합니다.
로컬 단위 테스트 (대 계측 테스트)의 경우 파일을 아래에 놓고 src/test/resources
classLoader를 사용하여 읽을 수 있습니다. 예를 들어 다음 코드 myFile.txt
는 리소스 디렉터리에서 파일을 엽니 다 .
InputStream in = this.getClass().getClassLoader().getResourceAsStream("myFile.txt");
그것은 함께 일했습니다
- 안드로이드 스튜디오 1.5.1
- gradle 플러그인 1.3.1
제 경우 해결책은 gradle 파일에 추가하는 것이 었습니다.
sourceSets {
test.resources.srcDirs += 'src/unitTests/resources'
}
AS 2.3.1에 의해 모든 것이 발견 된 후
javaClass.classLoader.getResourceAsStream("countries.txt")
I've had plenty of problems with test resources in Android Studio so I set up a few tests for clarity. In my mobile
(Android Application) project I added the following files:
mobile/src/test/java/test/ResourceTest.java
mobile/src/test/resources/test.txt
mobile/src/test/resources/test/samePackage.txt
The test class (all tests passes):
assertTrue(getClass().getResource("test.txt") == null);
assertTrue(getClass().getResource("/test.txt").getPath().endsWith("test.txt"));
assertTrue(getClass().getResource("samePackage.txt").getPath().endsWith("test/samePackage.txt"));
assertTrue(getClass().getResource("/test/samePackage.txt").getPath().endsWith("test/samePackage.txt"));
assertTrue(getClass().getClassLoader().getResource("test.txt").getPath().endsWith("test.txt"));
assertTrue(getClass().getClassLoader().getResource("test/samePackage.txt").getPath().endsWith("test/samePackage.txt"));
In the same root project I have a Java (not Android) project called data
. If I add the same files to the data project:
data/src/test/java/test/ResourceTest.java
data/src/test/resources/test.txt
data/src/test/resources/test/samePackage.txt
Then all the tests above will fail if I execute them from Android Studio, but they pass on the command line with ./gradlew data:test
. To get around it I use this hack (in Groovy)
def resource(String path) {
getClass().getResource(path) ?:
// Hack to load test resources when executing tests from Android Studio
new File(getClass().getClassLoader().getResource('.').path
.replace('/build/classes/test/', "/build/resources/test$path"))
}
Usage: resource('/test.txt')
Android Studio 2.3, Gradle 3.3
If you go to Run -> Edit configurations -> JUnit and then select the run configuration for your unit tests, there is a 'Working directory' setting. That should point to wherever your json file is. Keep in mind this might break other tests.
여기에 내 결과를 추가해야하지만. 이것이 조금 오래되었다는 것을 알고 있지만 src / test / resources 디렉토리가 없지만 전체 프로젝트에 대해 하나의 리소스 디렉토리 만있는 Gradle의 최신 버전의 경우이 줄을 Gradle 파일에 추가해야합니다.
android {
testOptions {
unitTests {
includeAndroidResources = true
}
}
}
이렇게하면 다음을 통해 리소스에 액세스 할 수 있습니다.
this.getClass().getClassLoader().getResourceAsStream(fileName);
나는 이것을 찾고 있었지만 답을 찾을 수 없어서 다른 사람들을 돕기로 결정했습니다.
참고 URL : https://stackoverflow.com/questions/29341744/android-studio-unit-testing-read-data-input-file
'Programing' 카테고리의 다른 글
DIV 요소를 스크롤 할 때 페이지 스크롤을 방지하는 방법은 무엇입니까? (0) | 2020.09.04 |
---|---|
인터페이스에 정의 된 메소드의 "기본"구현은 무엇입니까? (0) | 2020.09.04 |
SQL Developer에 새 연결을 추가 할 때 Oracle TNS 이름이 표시되지 않음 (0) | 2020.09.04 |
Android 인 텐트 필터 : 앱을 파일 확장자와 연결 (0) | 2020.09.04 |
표준 입력에서 한 줄씩 읽는 방법은 무엇입니까? (0) | 2020.09.04 |