我正在编写一个android测试用例,需要对正在测试的Activity执行单独的Activity(不是为了测试而是为了获得对contentresolver的访问权限,所以我可以更改一些电话设置)。
是否可以从测试用例或其他方式开始活动。
我知道用于测试活动的AndroidTestCase类,我在测试中使用它,但是我需要使用ContentResolver来更改电话设置,然后测试被测活动的反应,所以我需要另一个应用程序组件来更改这些设置。
注意:我发布了多个活动测试背后的复杂性(需要一个ActivityManager),但我只想使用它的方法来改变设置,所以我甚至可以在onCreate方法中使用逻辑。
答案 0 :(得分:4)
Android为测试活动提供了一个特殊的检测框架。您必须使用此框架,因为活动具有复杂的生命周期,在此提供的框架之外是不可调用的。查看Activity Testing Android文档的Development部分中的Testing链接。如果这不能回答你的问题,你可能会稍微改写一下。
修改强>
你应该真正扩展ActivityUnitTestCase来测试一个Activity,而不是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();
}
}
答案 1 :(得分:2)
AndroidTestCase和ActivityInstrumentationTestCase2都提供了获取上下文的方法
AndroidTestCase:
getContext();
ActivityInstrumentationTestCase2
getInstrumentation().getContext();
您可以使用这些上下文来启动另一个活动,但是权限是从被测试的应用程序中采用的,因此在我使用contentresolver的情况下,我只有相同的权限来更改我在被测试的应用程序中执行的设置。
在我的情况下,这是不好的,所以我不得不创建一个单独的应用程序,它具有自己的权限和后台服务,然后我可以通过使用上下文启动意图来控制。