2011-12-05 35 views
2

我测试这是应该开始新的活动时开放(URL)方法被调用它的对象:的Android - 单元测试,一个活动已经启动,并在其上工作

我想获取活动的实例,并根据URL检查一些参数。

我发现这个文档片断:

ActivityManager am = (ActivityManager) mActivity 
    .getSystemService("activity"); 
List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
ComponentName componentInfo = taskInfo.get(0).topActivity; 

但它只返回类的名字,我想断言该活动的实例的东西。

有没有人有关于如何做到这一点的想法?

感谢:-)

朱利安

回答

5

好吧,我已经找到了一个解决方案:活动监视器类:

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); 

    //... 

} 
2

根据那种你写的测试,你可以尝试以下选项:

如果你正在编写一个功能测试是值得拥有看看Robotium。 Robotium是“一个创建的测试框架,可以轻松为Android应用程序编写功能强大且强大的自动黑盒测试案例。”在Solo类中,他们提供的是一个getCurrentActivity()方法,该方法应返回您正在查找的类的一个实例(在封面下,它看起来像是在ActivityInstrumentationTestCase2提供的Instrumentation实例上设置ActivityMonitor)。

如果你正在编写单元测试,并且你想检查传递给startActivity()的Intent的属性,那么你可以提供你自己的模拟/间谍上下文实例(可能需要像Mockito这样的库的帮助if你正在JVM上运行你的测试)。或者,您可以使用像Robolectric这样的框架,该框架从其ShadowApplication类公开一个名为get/peekNextStartedActivity()的方法。有关如何使用它的更多信息,请参阅他们的网站。

希望这会有所帮助。

+0

对不起,我想包括多个超链接,但作为一个新的用户,我仅限于2 –

+0

谢谢你,我(呸!)已经投票了,你不应该留下一个新的用户很长时间:-)我听说过这些工具,但我们试图坚持提供的工具,因为我们想要将测试集成到我们的持续构建中。但我们必须看看它。 – Julien

+0

好,祝你好运。实际上我使用的是Robotium和Robolectric两种CI构建方式,它们工作得很好。事实上,由于Robolectric的测试通常比提供的工具好,因为测试的执行速度会更快,您可以编写更具体的'单元'式测试(这有助于缺陷隔离并涉及编写更少的设置代码),并且由于它们像正常的JUnit测试一样运行,您可以从所有可用的附加工具/插件支持中受益。 –

相关问题