나는 유틸리티 클래스 (활동 없음) 만 포함하는 Android Bitmap 클래스 (AndroindLib라고 부름)를 기반으로 Android 라이브러리 프로젝트를 작성하고 있습니다. Android JUnit을 사용하여 테스트하려고했지만 AnroidLib.apk를 찾을 수 없다고 계속 불평합니다.
단위 테스트 Android 라이브러리 프로젝트에 올바른 방법은 무엇입니까?
나는 유틸리티 클래스 (활동 없음) 만 포함하는 Android Bitmap 클래스 (AndroindLib라고 부름)를 기반으로 Android 라이브러리 프로젝트를 작성하고 있습니다. Android JUnit을 사용하여 테스트하려고했지만 AnroidLib.apk를 찾을 수 없다고 계속 불평합니다.
단위 테스트 Android 라이브러리 프로젝트에 올바른 방법은 무엇입니까?
답변:
문서 인용 :
"라이브러리 프로젝트의 코드 및 리소스에 대한 테스트를 설정하는 데 권장되는 두 가지 방법이 있습니다.
라이브러리 프로젝트에 의존하는 애플리케이션 프로젝트를 계측하는 테스트 프로젝트를 설정할 수 있습니다. 그런 다음 라이브러리 별 기능에 대한 테스트를 프로젝트에 추가 할 수 있습니다.
라이브러리에 의존하는 표준 애플리케이션 프로젝트를 설정하고 해당 프로젝트에 계측을 배치 할 수 있습니다. 이를 통해 테스트 / 계측 및 테스트 할 코드를 모두 포함하는 자체 포함 된 프로젝트를 만들 수 있습니다. "
테스트 프로젝트에서 라이브러리의 패키지와 동일하도록 패키지 이름을 변경하면됩니다. 예를 들어, 패키지가 "com.example.lib"
. 라이브러리를 대상으로하는 테스트 프로젝트를 만듭니다. 매니페스트 파일에서 package="com.example.lib.test"
, 및 targetPackage="com.example.lib"
. 패키지를 "com.example.lib.test"에서 "com.example.lib"로 변경하십시오 ( targetPackage
그대로 두십시오).
또한, 라이브러리가 테스트 프로젝트에 참조되어 있는지 확인 하지 Java 빌드 경로에 있지만, 일반적인 안드로이드 라이브러리로 : 이클립스에가있는 라이브러리로 표시되어야 Project->Properties->Android
탭하지만, 하지 에 Project->Properties->Java Build Path
탭을 선택합니다.
그런 다음 테스트를 실행하십시오.
http://www.paulbutcher.com/2010/09/android-library-project-with-tests-step-by-step/ 은 CommonsWare의 답변에서 두 번째 제안을 구현하는 데 필요한 프로세스를 설명하는 데 도움이됩니다.
당 문서 :
라이브러리 모듈 테스트는 앱 테스트와 동일합니다. 가장 큰 차이점은 라이브러리와 해당 종속성이 테스트 APK의 종속성으로 자동 포함된다는 것입니다. 즉, 테스트 APK에는 자체 코드뿐만 아니라 라이브러리의 AAR 및 모든 종속성도 포함됩니다. 별도의 '테스트중인 앱'이 없기 때문에 androidTest 작업은 테스트 APK 만 설치 (및 제거)합니다. 여러 매니페스트 파일을 병합 할 때 Gradle은 기본 우선 순위를 따르고 라이브러리의 매니페스트를 테스트 APK의 기본 매니페스트에 병합합니다.
참고 : 이 솔루션은 Eclipse Indigo (3.8.2) 사용을 기반으로하며 기본 원칙은 동일하지만 다른 IDE에 대해 약간 다르게 구현해야 할 수 있습니다.
비슷한 문제가 있었고 다음 작업이 항상 작동한다는 것을 알았습니다.
( 참고 :이 지침은 처음부터 새 프로젝트 그룹을 빌드하기위한 것입니다. 프로젝트 그룹의 일부를 이미 빌드 한 경우 동일한 방식으로 연결되도록 프로젝트를 수정해야 할 수 있습니다. )
다음과 유사한 3 개의 프로젝트 (Android 라이브러리, Android 테스트 앱, Android 라이브러리 테스터)가 있어야합니다.
다음과 유사한 Android 라이브러리를 테스트하기위한 클래스로 끝나야합니다.
package danny.remington.remington_android_tools_test_app.test;
import android.test.ActivityInstrumentationTestCase2;
import danny.remington.remington_android_tools_test_app.TestActivity;
/**
*
*/
public class TestActivityTest extends
ActivityInstrumentationTestCase2<TestActivity> {
public TestActivityTest() {
super(TestActivity.class);
}
}
그런 다음 원하는 테스트를 추가 할 수 있습니다. Android 특정 구성 요소 (예 : Assets 폴더)에 액세스해야하는 경우가 아니면 테스트를 실행하기 위해 Android 테스트 앱 (이 예에서는 'RemingtonAndroidToolsTestApp')을 추가로 참조 할 필요가 없습니다. Android 특정 구성 요소에 액세스해야하는 경우 Android 테스트 앱 (이 예에서는 'RemingtonAndroidToolsTestApp')을 수정 한 다음 표준 Android Junit API에서 제공하는 도구를 통해 참조하면됩니다. (여기에서 자세한 내용을 읽을 수 있습니다 : http://developer.android.com/tools/testing/testing_android.html )
ulitiy 클래스가 Android 특정 코드에 의존하지 않는 경우 표준 JUnit 단위 테스트를 사용할 수 있습니다. Android 버전을 사용할 필요가 없습니다.