我正在测试一个对象,该对象应该在调用open(url)方法时启动一个新活动:
public void open(String url) {
Intent i = new Intent(getContext(), Browser.class);
Log.d(TAG, "open:" + url);
i.putExtra("URL", url);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getContext().startActivity(i);
}
我想获取活动的实例,并根据URL检查一些参数。
我发现这个剪断了:
ActivityManager am = (ActivityManager) mActivity
.getSystemService("activity");
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
但它只返回类的名称,我想在活动的实例上断言。
有人知道如何做到这一点吗?
谢谢: - )
于连
答案 0 :(得分:6)
好的,我找到了一个解决方案:ActivityMonitor类:
private Instrumentation.ActivityMonitor mBrowserActivityMonitor;
protected void setUp() throws Exception {
super.setUp();
mBrowserActivityMonitor = new Instrumentation.ActivityMonitor(Browser.class.getName(), null, false);
getInstrumentation().addMonitor(mBrowserActivityMonitor);
//...
}
public void testOpen()
{
//...
Activity activity = mBrowserActivityMonitor.waitForActivityWithTimeout(5 * 1000);
assertNotNull("Activity was not started", activity);
//...
}
答案 1 :(得分:2)
根据您正在编写的测试类型,您可以尝试以下选项:
如果您正在编写功能测试,那么值得查看Robotium。 Robotium是“一个测试框架,旨在为Android应用程序编写功能强大且强大的自动黑盒测试用例”。在他们提供的Solo类中是一个getCurrentActivity()方法,它应该返回你正在寻找的类的实例(在看起来他们在ActivityInstrumentationTestCase2提供的Instrumentation实例上设置ActivityMonitor)。
如果您正在编写单元测试,并且想要检查传递给startActivity()的Intent的属性,那么您可以提供自己的mock / spy上下文实例(如果你有可能在像Mockito这样的库的帮助下'在JVM上运行测试)。或者,您可以使用类似Robolectric的框架,该框架从其ShadowApplication类公开名为get / peekNextStartedActivity()的方法。有关如何使用它的更多信息,请访问他们的网站。
希望这有帮助。