2012-02-17 106 views
0

在我的android应用程序的测试项目中,我最初对几个低级类进行了一系列测试。低层次我的意思是说,他们不是活动,服务或任何特定的东西。他们只是根据规格进行一些工作的课程。他们通过应用上下文 - 数据库,一些资源等传递一些信息。单元测试android类

所有的测试都是绿色的,我很高兴。在我为测试活动添加了另一个测试课程后,突然我的绿色测试开始失败。我添加的Activity测试是绿色的,但现在一些绿色的测试现在会抛出异常。

从dalvik跟踪看起来,虽然我以前使用的绿色测试不需要除应用程序上下文以外的其他任何东西,系统仍会尝试恢复某些活动(不是我试图用单元测试新的测试)。

所以,这里是我的问题:我如何单元测试一个只需要应用程序上下文但没有其他的类?如何防止运行时尝试启动我不在乎的活动?

+0

看看[Robotium](http://code.google.com/p/robotium/),它工作得很好。如果你已经使用硒,一些方面应该是熟悉的。 – Android 2012-02-18 02:59:38

+0

@Android他想单元测试。 Robotium用于[黑盒](http://en.wikipedia.org/wiki/Black-box_testing)测试,而不是单元测试。如果你真的想[单元测试](http://en.wikipedia.org/wiki/Unit_testing)Android应用程序,Robolectric是唯一的方法。 – 2012-02-20 19:36:06

回答

2

听起来像是你想从你的单元测试中去掉Android。如果你可以使用Mocks,这将是很好的,但不幸的是,如果你涉及Android框架,你会遇到各种各样的问题,试图嘲弄事情。

我强烈建议你使用Robolectric来“defang”android,并使用Mockito来模拟你不关心的东西。这将允许你继续在JVM上运行你的单元测试(我在这里做一个假设)。

+0

在本地运行测试会很好,但这比我现在能够脱字的东西还要多 – mfeingold 2012-02-18 01:32:41

+0

它不像看起来那么糟糕,而且在您全部安装完毕后,IMO处理Android测试框架要容易得多。如果您使用的是Eclipse,可以在这里找到设置Robolectric的说明(http://pivotal.github.com/robolectric/eclipse-quick-start.html)。设置只需要约15分钟。如果你想编写真正的单元测试,这是最好的方法,因为单元测试是关于隔离你的类的,所以你想让Android脱离方式,并且能够模拟出这些类这不是当前正在测试的课程。 – 2012-02-20 19:40:07

0

很难说,给你迄今为止所传达的信息。

您是否总是使用InstrumentationTestRunner来运行单元测试?您必须使用Instrumentation和InstrumentationTestRunner来测试任何使用Android框架的组件(Activity,Service,Content Provider)或Context。

这在“开发人员指南”中的“测试”中进行了说明。

+0

是的,测试项目被配置为运行InstrumentationTestRunner(它的一个子类)。 – mfeingold 2012-02-18 01:31:31