Android Junit测试与正常Junit测试

Jam*_*vec 9 junit android android-testing

我正在接管一个Android项目,我希望为项目引入单元测试,以帮助避免可能的回归.

对于普通的java项目,我有两个源文件夹:srctest.在src源文件夹中包含了我所有的源文件和我的test源文件夹中包含了我所有的单元测试,我相信这是保持独立的测试从源头非常标准,所以你不必与他们发货.

我一直在网上阅读,Android应用程序的方法看起来有点不同.几个例子讨论为a设置第二个项目android test project然后引用它android project.

我想确认一些事情:

  1. 有没有第二个项目用于测试在测试android项目时要做的适当的事情,或者我只是找到了不好的例子?
  2. 所有单元测试都应该是android单元测试吗?例如,是的,他们应该都是,或者我不应该在android单元测试和junit之间混合,因为junits具有较少的开销.
  3. android单元测试对junit测试有什么额外的好处?例如处理模拟器等

Cha*_*ins 8

有没有第二个项目用于测试在测试android项目时要做的适当的事情,或者我只是找到了不好的例子?

是的,通常会有一个单独的"测试项目"来测试Android特定代码.http://developer.android.com/tools/testing/testing_android.html

所有单元测试都应该是android单元测试吗?例如,是的,他们应该都是,或者我不应该在android单元测试和junit之间混合,因为junits具有较少的开销.

你通常会有一个混合,因为你不能在标准的JVM上使用常规的'JUnit测试Android特定的代码(不是没有一些帮助库,稍后会有更多内容).

在实践中,我发现将应用程序划分为普通的JVM组件和Android部分是有意义的.例如,如果您需要与REST API进行通信,则可以使用单独的组件来执行此操作,而且只使用普通的Java.使用标准JUnit可以轻松测试这些类型的组件.这种类型的架构还可以更清晰地分离责任,并且通常也更容易理解和维护设计.(此类组件可以作为常规JAR包含在您的Android应用中.)

android单元测试对junit测试有什么额外的好处?例如处理模拟器等

Android测试可能会很慢而且很痛苦,因为完整的Android测试会在模拟器(或设备)中运行Android堆栈.但是,Android测试对于测试特定于Android的应用程序部分(例如上下文/活动/服务等)是必需的.

由于本机Android测试的繁琐和缓慢的性质,已经创建了几个框架,这些框架模拟或存储SDK的部分并采取不同的方法来提供帮助.例如,您可能需要研究Robolectric和Robotium.(这些都各有利弊.)