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

Fed*_*dor 19 junit android

我正在为我的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移动到目标应用程序时,一切正常.所以我开始想知道测试项目和我的应用程序之间的区别是什么,甚至可以在测试项目中进行活动.

yor*_*rkw 9

是的,有可能但不推荐,正如官方开发指南中所述:

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

为此,您需要:

  1. 在Test Project的AndroidManifest.xml中定义您的虚拟活动.
  2. 在Test Project的AndroidManifest.xml中将instrumentation targetPackage指向自身.(被测试的Activity类必须在instrumentation targetPackage下).

假设我有一个测试项目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>
Run Code Online (Sandbox Code Playgroud)