我正在写一个android测试用例,它需要对被测试的活动执行一个独立的活动(不是为了测试,而只是为了访问contentresolver,以便我可以更改一些电话设置)。
从测试用例或以其他方式启动活动是完全可能的吗?
我知道用于测试活动的AndroidTestCase类,并且我正在测试中使用它,但是我需要使用ContentResolver来更改电话设置,然后测试被测活动的反应,因此我需要另一个应用程序组件来更改这些设置。
注意:我释放了多个活动测试(需要一个ActivityManager)背后的复杂性,但我只想使用它的方法来更改设置,这样我甚至可以在onCreate方法中拥有逻辑。
发布于 2011-04-13 06:32:43
AndroidTestCase和ActivityInstrumentationTestCase2都提供了获取上下文的方法
AndroidTestCase:
getContext();ActivityInstrumentationTestCase2
getInstrumentation().getContext();您可以使用这些上下文来启动另一个活动,但是权限是从被测应用程序中采用的,因此在我使用contentresolver的情况下,我只有相同的权限来更改在被测应用程序中所做的设置。
在我的情况下,这是不好的,所以我必须创建一个具有自己的权限的独立应用程序和一个后台服务,然后我可以通过使用上下文启动意图来控制它。
发布于 2011-03-26 02:18:35
Android为测试活动提供了一个特殊的工具框架。你必须使用这个框架,因为活动有一个复杂的生命周期,在这个提供的框架之外是不可调用的。在Activity Testing的Android文档的开发部分查看测试链接。如果这不能回答你的问题,你可以换个说法。
编辑
你真的应该扩展ActivityUnitTestCase来测试一个活动,而不是AndroidTestCase。您可以获得更多特定于您需要测试的功能。如果扩展ActivityUnitTestCase,就会有一个名为launchActivity的函数。它将启动您需要的活动,并为您提供该活动的一个实例,以便您可以调用该活动上的方法,如set、get和finish。对于一次操作单个和多个活动,这应该可以做任何您需要的事情。
示例代码:
@MediumTest
public class Test extends ActivityUniTestCase<HelloActivity> {
public Test(Class<HelloActivity> activityClass) {
super(activityClass);
}
@MediumTest
public void testLifeCycleCreate() {
HelloActivity hActivity = startActivity(new Intent(Intent.ACTION_MAIN), null, null);
getInstrumentation().callActivityOnStart(hActivity);
getInstrumentation().callActivityOnResume(hActivity);
GoodByeActivity gActivity = launchActivity("package.goodbye", GoodByeActivity.class, null);
gActivity.finish();
}
}https://stackoverflow.com/questions/5434933
复制相似问题