2012-04-24 4 views
16

내 질문 : 독립 실행 형 Android 라이브러리 용 테스트 프로젝트를 만들려면 어떻게해야합니까?Android 라이브러리 프로젝트 용 독립 실행 형 테스트 프로젝트

나는 내 JUnit 테스트 클래스를 포함하는 안드로이드 프로젝트 (프로젝트 설정에서 "라이브러리"로 표시됨) 내 안드로이드 라이브러리 있어요. 테스트 프로젝트는 Android 라이브러리 ("Android"아래의 프로젝트 설정에서)를 올바르게 참조합니다.

라이브러리 소스 코드는 com.mayastudios 패키지에 있습니다. 모든 테스트 케이스는 동일한 패키지에 있지만 다른 프로젝트에도 있습니다. 내가 ADT 이클립스에서합니다 (테스트 프로젝트를 실행할 때

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.spatialite.test" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="com.mayastudios" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <application android:label="Spatialite-NewApi-UnitTests"> 
     <uses-library android:name="android.test.runner" /> 
    </application> 

</manifest> 

사용, 그러나 :

+- MyLibraryProject 
    +- src 
     +- com/mayastudios/MyClass.java 
    +- AndroidManifest.xml 
    +- ... 
+- MyTestProject (references MyLibraryProject) 
    +- test 
     +- com/mayastudios/MyClassTests.java 
    +- AndroidManifest.xml 
    +- ... 

여기 테스트 프로젝트의 안드로이드 매니페스트의 : 그러니까 기본적으로 나는 이런 식으로 뭔가를 "Run As -> Android JUnit Test") 다음 오류가 발생합니다.

Unable to find instrumentation target package: com.mayastudios 

mplete 콘솔 로그 :

[2012-04-24 17:24:20 - spatialite-test] Android Launch! 
[2012-04-24 17:24:20 - spatialite-test] adb is running normally. 
[2012-04-24 17:24:20 - spatialite-test] Performing android.test.InstrumentationTestRunner JUnit launch 
[2012-04-24 17:24:20 - spatialite-test] Automatic Target Mode: using device '3732FBC2711300EC' 
[2012-04-24 17:24:20 - spatialite-test] Uploading spatialite-test.apk onto device '3732FBC2711300EC' 
[2012-04-24 17:24:20 - spatialite-test] Installing spatialite-test.apk... 
[2012-04-24 17:24:22 - spatialite-test] Success! 
[2012-04-24 17:24:22 - spatialite-test] Launching instrumentation android.test.InstrumentationTestRunner on device 3732FBC2711300EC 
[2012-04-24 17:24:22 - spatialite-test] Collecting test information 
[2012-04-24 17:24:23 - spatialite-test] Test run failed: Unable to find instrumentation target package: com.mayastudios 

나는 작동하지 않았다 매니페스트에서 <instrumentation> 태그를 제거하기 위해 노력했다.

내가 지금까지이 작업을 얻는 유일한 방법은 기본 Android 프로젝트 (활동 포함)를 만들고 테스트 프로젝트에서 참조하고이 기본 Android 프로젝트의 패키지 이름을 <instrumentation> 아래 targetPackage으로 사용하는 것입니다. 그러나 그것은 내가 원하는 것이 아닙니다. 독립 실행 형 테스트 프로젝트가 필요합니다.

제안 사항?

+1

InstrumentationTestRunner는 콘크리트 apk를 타겟팅해야하지만 라이브러리 프로젝트 자체는 apk로 내보낼 수 없습니다. 자세한 내용은 [여기] (http://stackoverflow.com/questions/10172636/unable-to-find-instrumentation-target-package-com-xyz/10173034#10173034)에서 설명했습니다. – yorkw

+0

예, 알겠습니다. 나는 그저 test.apk가 장치에 설치되어 있기 때문에 자체적으로 실행할 수 있다고 생각했습니다. –

+0

예상대로 작동합니다. 아래 내 대답을 참조하십시오. –

답변

25

아, 대답은 너무 간단합니다. 오류는 테스트 프로젝트 3 행의 Android 매니페스트에 있습니다. 여기에 잘못된 패키지가 나와 있습니다. 그래서 수정 된 매니페스트는 다음과 같습니다 : 그들은 틀렸어 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.mayastudios" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="10" /> 

    <instrumentation 
     android:name="android.test.InstrumentationTestRunner" 
     android:targetPackage="com.mayastudios" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

    <application android:label="Spatialite-NewApi-UnitTests"> 
     <uses-library android:name="android.test.runner" /> 
    </application> 

</manifest> 

그리고 당신은 세 가지 프로젝트 (라이브러리 프로젝트에서 테스트, 테스트 프로젝트)가 필요합니다라고 모든 사람에게

. 도서관 프로젝트와 테스트 프로젝트로 충분하다. 테스트 프로젝트에는 액티비티가 포함될 필요가 없습니다.

+0

'com.mayastudios'가 테스트 프로젝트라고 가정합니다. 테스트 프로젝트 자체를 대상으로 할 수 내 대답 [여기] (http://stackoverflow.com/questions/9518514/is-it-possible-to-define-activity-inside-android-test-project-and- run-a-test-aga/9525354 # 9525354). 실제로 당신이 한 것은 test.apk을 실행 가능하게하고 타겟으로 지정하는 것입니다 (** 당신은 당신의 라이브러리 코드 **의 대상이 아닙니다).공식적인 개발 가이드에서 라이브러리 프로젝트를 간접적으로 테스트하기위한 응용 프로그램 프로젝트가 필요하다는 것이 분명하게 설명되어 있습니다. – yorkw

+0

@yorkw : 실제로, com.mayastudios가 테스트하려는 Android 라이브러리 프로젝트에 연결된다고 가정하면,이 패턴은 [내 삭제 된 답변에 대한 귀하의 코멘트에 링크 된 페이지의 두 번째 글 머리 기호] (http : /developer.android.com/guide/developing/projects/index.html#testing). – CommonsWare

+0

@CommonsWare, Ahhhhh, 이제 알겠습니다. 세바스찬, 네, 맞습니다. 전에이 패턴을 절대로 사용해서는 안됩니다. – yorkw

관련 문제