2012-03-01 2 views
18

Android 애플리케이션에서 구성 요소에 대한 테스트를 작성하고 있습니다. 이 구성 요소는 활동을 사용하여 일부 보고서를 작성합니다. 그래서 구성 요소 (못생긴 아키텍처)를 테스트하기 위해 액티비티가 필요하며 테스트 프로젝트 내에서 더미 액티비티를 만들고 ActivityInstrumentationTestCase2<TestActivity>에서 상속 된 테스트를 만드는 것이 쉽지만 어떤 이유로 나는 항상 java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.xxx/.Testctivity } 예외를 얻습니다.Android 테스트 프로젝트에서 Activity를 정의하고 테스트를 실행할 수 있습니까?

테스트 활동이 매니페스트 파일에 추가되고 패키지가 올바르게 설정되어있는 것으로 보입니다.

저는 그것을 행운과 함께 com.xxx (애플리케이션 패키지)와 com.xxx.test 패키지에 넣으려고했습니다. 하지만 TestActivity를 대상 응용 프로그램으로 이동하면 모든 것이 잘 동작합니다. 그래서 나는 테스트 프로젝트와 내 애플리케이션의 차이점을 궁금해하기 시작했으며 테스트 프로젝트 내부에서 활동하는 것이 가능할 수도 있습니다.

답변

9

예, 그것은 가능하지만 그것은 official dev guide에 명시된 바와 같이하지 않는 것이 좋습니다 :

테스트 프로젝트를 만들었 으면 테스트 패키지로 채 웁니다. 이 패키지는 원하는 경우 활동을 정의 할 수 있지만 활동을 필요로하지 않습니다. 테스트 패키지는 Activity 클래스, 테스트 케이스 클래스 또는 일반 클래스를 결합 할 수 있지만 가장 좋은 테스트 기능을 제공하기 때문에 Android 테스트 케이스 클래스 또는 JUnit 클래스 중 하나를 확장해야한다. 이 작업을 수행하기 위해

, 당신이 필요합니다

  1. 이 테스트 프로젝트의 AndroidManifest.xml에에서 더미 활동을 정의합니다.
  2. 테스트 프로젝트의 AndroidManifest.xml에서 instrumentation targetPackage 지점을 자체로 변경하십시오. 테스트중인 Activity 클래스는 instrumentation targetPackage 아래 이어야합니다. 당신이 DummyActivityTest를 사용하여 테스트 DummyActivity를 원한다면 내가 두 클래스 DummyActivity 및 DummyActivityTest를 포함 com.example.test 테스트 프로젝트가 있다고 가정

, 다음, 당신은이처럼 테스트 프로젝트의 AndroidManifest.xml을 정의해야합니다

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

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

<!-- targetPackage point to test project itself --> 
<instrumentation 
    android:name="android.test.InstrumentationTestRunner" 
    android:targetPackage="com.example.test" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <uses-library android:name="android.test.runner" /> 
    <activity 
     android:name=".DummyActivity" 
     android:label="@string/app_name" > 
    </activity> 
</application> 

+0

targetPackage를 self로 변경하면 , InstrumentationTestRunner.onCreate에서 NoSuchMethodException로 실패하기 시작합니다. – basin

+0

이 방법에 문제가있었습니다. 나는/manifest/@ 패키지가/manifest/instrumentation/@ android : targetPackage와 동일하다면 테스트가 테스트중인 애플리케이션을 효과적으로 대체 할 것이므로 클래스를 참조 할 수 없다고 생각한다. 나는 ClassNotFoundExceptions를 얻고 있었다. –

+1

androidTest 디렉토리에 AndroidManifest.xml을 추가하여이 접근 방식을 사용할 수 있습니다. 하지만 안드로이드 스튜디오의 최신 버전에서는 2.3.1 버전부터 지금 사용하고 있습니다.''요소는 필요하지 않습니다. –

0

테스트 프로젝트와 활동은 함께 공존 할 수있는 테스트 프로젝트의 패키지 이름으로 대상 패키지 이름을 넣어

+0

답장을 보내 주셔서 감사합니다. 내가 제안한대로 시도했지만, 지금은 얻을 수 java.lang.RuntimeException : 스위트 건설 중 예외 android.test.suitebuilder.TestSuiteBuilder $ FailedToCreateTests.testSuiteConstructionFailed (TestSuiteBuilder.java:239) – Fedor

관련 문제