我已经阅读了一些关于Android单元测试的文章,包括官方文档,并写了一些演示,它很复杂和缓慢,因为它必须在设备或模拟器上运行。我应该继续使用它还是找到另一种选择?我应该使用Android Instrumentation来编写单元测试吗?
回答
通常应在目标设备上运行良好的测试。这就是为什么我的答案是:是的,你应该继续使用它。如果你在模拟器或类似的东西上测试,可能会有一些小的差异,会导致与真实设备不同的行为(特别是如果你使用某些硬件组件)。 如果您使用真实设备,测试运行速度快于仿真器的副作用。
我的替代看起来是这样的:
我已经重构我的Android应用到
- 应用程序(使用库GUI),
- Android的独立的-LIB(服务接口,dto- s,没有数据库绑定的businesslogic)
- android-dependent-lib(android特有的服务接口和数据库绑定实现)
为android-independant-lib我已经创建了“正常”junit测试
为Android特定的部分我目前没有自动测试。
您正在寻找Robolectric。
Robolectric是一个单元测试框架,它可以消除Android SDK jar,因此您可以测试驱动Android应用程序的开发。测试在几秒钟内在工作站上的JVM内部运行。
尚未完成(例如支持库操作栏不受支持),但它会为您节省大量时间。除此之外,你可以通过自己开发shadows
来添加缺少的内容。
该项目托管在https://github.com/robolectric/robolectric,而不是您指出的地方。弃用的是由Robolectric的作者之一写的一些Gradle插件,但不是Robolectric本身。 – 2014-10-28 05:03:51
感谢您的更正。我删除了关于[depricated roboelectric-gradle-plugin]的原始错误评论(https://github.com/JakeWharton/gradle-android-test-plugin)。是否有任何非缺陷的机电插件? – k3b 2014-10-28 07:34:44
在maven上,没有Robolectric插件这样的东西。 Robolectric是一个用于编写JUnit测试的库,由诸如surefire等插件执行。我想它在Gradle上是相似的。 – 2014-10-28 08:51:19
- 1. Android - 使用Instrumentation框架进行单元测试
- 2. 我应该写集成测试还是单元测试?
- 3. 我应该在android开发中做单元测试吗?
- 4. 我应该在单元测试中使用AutoMapper吗?
- 5. 单元测试时我应该使用模拟对象吗?
- 6. 我应该在vs2008中使用内置的utils来进行单元测试吗?
- 7. 我应该在编译之前编写测试吗?
- 8. 单元测试应该知道NHibernate吗?
- 9. MSTest:使用TestContext编写单元测试
- 10. 单元测试php应用程序(我应该压力测试?)
- 11. 我应该单元测试我的网格渲染逻辑吗?
- 12. 我应该为参数异常编写测试吗?
- 13. 如何编写测试:Socket.io应用程序单元测试
- 14. 单元测试应该使用日志记录吗?
- 15. 初学者程序员应该使用单元测试吗?
- 16. 如何编写php单元测试来测试堆栈功能?
- 17. 单元测试应该覆盖压力测试吗?
- 18. 我应该使用mocks来测试方法实现吗
- 19. 我应该使用def或test关键字编写rails测试吗?
- 20. 我应该使用Android菜单吗?
- 21. 我应该单元测试DefaultModelBinder返回的模型吗?
- 22. 我们应该单元测试控制台输出吗?
- 23. 我们应该单元测试网络服务吗?
- 24. 我们应该单元测试日志记录吗?
- 25. 我应该更改单元测试的命名约定吗?
- 26. 我应该访问单元测试的受保护方法吗?
- 27. 我应该单元测试一种主要方法吗?
- 28. 我应该单元测试XML模式吗?
- 29. 我应该单元测试验证码吗?这看起来不切实际
- 30. 用.NET编写的单元测试COM
看起来很有趣,但有时我们应该测试组件的UI或生命周期。 – handrenliang 2014-10-22 09:18:26