我正在为我的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移动到目标应用程序时,一切正常。所以我开始想知道测试项目和我的应用程序之间的区别是什么,甚至可以在测试项目中进行活动。
答案 0 :(得分:9)
是的,有可能但不推荐,正如official dev guide中所述:
创建测试项目后,使用测试包填充它。此软件包不需要Activity,但您可以根据需要定义一个。虽然您的测试包可以组合Activity类,测试用例类或普通类,但您的主要测试用例应该扩展一个Android测试用例类或JUnit类,因为它们提供了最佳的测试功能。
为此,您需要:
假设我有一个测试项目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)
测试项目和活动可以共存,将目标包名称作为测试项目的包名称