Android Junit测试与普通Junit测试的区别

9
我正在接手一个Android项目,希望为该项目引入单元测试以避免可能的回归问题。
对于普通的Java项目,我有两个源文件夹:srctestsrc源文件夹包含所有源文件,而test源文件夹则包含所有单元测试,这是将测试与源代码分开的标准做法,因此您不必在发布时附带它们。
我在网上阅读了一些文章,发现Android应用程序的方法似乎有些不同。几个例子讲述了设置第二个项目作为android测试项目,然后引用android项目
我想确认一下以下几点:
  1. 在测试Android项目时是否需要创建第二个项目?还是说我只是找到了错误的例子?
  2. 所有的单元测试都应该是Android单元测试吗?例如,是的,它们都应该是,或者不应该混合使用Android单元测试和JUnit测试,因为JUnit测试的开销较小。
  3. 与JUnit测试相比,Android单元测试有哪些额外的好处?例如,可以处理模拟器等。
1个回答

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部分(例如Context / Activity / Service等)是必要的。
由于本机Android测试的麻烦和缓慢,因此已经创建了几个框架来模拟或存根SDK的各个部分,并采用不同的方法来帮助测试。例如,您可以考虑使用Robolectric和Robotium。 (它们各自具有优点和缺点。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接