是否可以在Android测试项目中定义Activity并对其进行测试?

时间:2012-03-01 15:03:32

标签: android junit

我正在为我的Android应用程序中的组件编写测试。该组件使用活动来制作一些报告。所以我需要一个活动来测试组件(丑陋的架构),我认为在测试项目中创建一个虚拟活动比创建从ActivityInstrumentationTestCase2<TestActivity>继承的测试更容易,但由于某种原因我总是得到java.lang.RuntimeException: Unable to resolve activity for: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.xxx/.Testctivity }例外。

测试活动被添加到清单文件中,并且包似乎设置正确。

我试过将它放在com.xxx(应用程序包)和com.xxx.test包中,没有运气。但是当我将TestActivity移动到目标应用程序时,一切正常。所以我开始想知道测试项目和我的应用程序之间的区别是什么,甚至可以在测试项目中进行活动。

2 个答案:

答案 0 :(得分:9)

是的,有可能但不推荐,正如official dev guide中所述:

  

创建测试项目后,使用测试包填充它。此软件包不需要Activity,但您可以根据需要定义一个。虽然您的测试包可以组合Activity类,测试用例类或普通类,但您的主要测试用例应该扩展一个Android测试用例类或JUnit类,因为它们提供了最佳的测试功能。

为此,您需要:

  1. 在Test Project的AndroidManifest.xml中定义您的虚拟活动。
  2. 在Test中将instrumentation targetPackage指向自身 Project的AndroidManifest.xml。 (被测试的Activity类必须 在仪器targetPackage下。)
  3. 假设我有一个测试项目com.example.test包含两个类DummyActivity和DummyActivityTest,那么如果你想使用DummyActivityTest测试DummyActivity,你需要像这样定义你的Test Project的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>
    

答案 1 :(得分:0)

测试项目和活动可以共存,将目标包名称作为测试项目的包名称