Androidtesting驱动开发
我在制作Android应用程序方面有相当的经验。 对于我的新项目,我们决定进行testing驱动开发(TDD)。 我一直在Robotium用户场景testing中弄湿我的手,并且它工作正常,看起来也很容易。
对于unit testing,我尝试使用(MockContext Android Class)来模拟上下文,但我无法这样做。 我浏览了这个博客http://sites.google.com/site/androiddevtesting/并通过这个http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html ,这表明在Android应用程序中的嘲弄仍然非常有限和困难,并build议使用PowerMock,jMockit,JeasyTest或Roboelectric(与Mockito和Maven结合)甚至RoboGuice。
我想从你们那里得到你认为哪个unit testing框架最适合testingAndroid应用程序的build议。 (尤其是testingAndroid类,可能会给出模拟上下文和其他模拟function,以便尽可能使testing用例尽可能独立)。 任何build议或指针都会有所帮助。 谢谢
对于设备外testing,请看Robolectric
对于设备testing,看看Borachio
底线:做得好还是非常非常困难。 事情正在改善(今天的情况比6个月前好得多),但Android是我曾经编写过程序中最具testing敌对性的环境。
要在Android中执行TDD,我个人使用以下所有内容:
- assertj-android :assertions for Android
- Mockito :嘲笑框架
- Robolectric :运行不需要Android模拟器的unit testing框架
- Robotium :UItesting(需要模拟器或设备运行)
另外:使用dependency injection库如Dagger或Roboguice将大大简化您的单元/集成testing。 要在多个设备上运行testing,请考虑使用“ 勺子” 。
- 在Activity for TDD(或BDD)的情况下使用ActivityInstrumentationTestCase2,并为所有逻辑编写正常的unit testing。 这也有助于我从逻辑活动中分离逻辑。
- 移动应用程序本质上是以UI为中心的。 因此,即使使unit testing看起来像functiontesting一样,嘲笑UI也没有任何意义。
- 为了增加额外意图,你可以为testing设置一个自定义的意图,或者通过覆盖设置来完成所有的testing。
- 嘲笑在Android上给了很多问题,所以我使用存根(stub)。
下面给出一个例子。 当您点击一个button时,活动显示Hello World –
public class HelloWorldActivityTest extends ActivityInstrumentationTestCase2<HelloWorldActivity> { private HelloWorld activity; public HelloWorldActivityTest() { super(HelloWorldActivityTest.class); } public void testShouldRenderGreetingOnButtonClick() { activity = this.getActivity(); Button button = (Button) activity.findViewById(R.id.btn_greet); TouchUtils.clickView(this, button); assertEquals("Hello World!", ((TextView) activity.findViewById(android.R.id.greeting_text)) .getText()); } }
编辑:事情发生了变化,因为我发布的答案。 Mockito现在对Android有相当不错的支持。 而对于testing,我们已经从ActivityInstrumentationTestCase2移到了Robolectric,只是为了在开发阶段挖掘JVM的速度。 Androidtesting框架非常适合集成和functiontesting,而不适用于unit testing。
要将android应用于TDD, Android Testing Codelab将对您非常有帮助。 代码实验显示了testing工具的用法,以及如何将android应用于TDD。我试了一下,这对我非常有帮助。
奖金:检查清洁架构
Androidtesting支持库为testingAndroid应用程序提供了一个广泛的框架。 该库提供了一组API,可以让您快速构build和运行应用程序的testing代码,包括JUnit 4和function性用户界面(UI)testing。 您可以从Android Studio IDE或从命令行运行使用这些API创build的testing。
阅读更多关于:
- 浓咖啡
- AndroidJUnitRunner
- JUnit4规则
- UI Automator
谢谢 :)
我们有
https://developer.android.com/training/testing/start/index.html
并能够testing本地(在JVM上运行)和仪器testing(在设备或模拟器上运行)
为此,我们需要添加
Android Testing Support Library
Android SDK包含两个用于function级应用程序testing的工具
猴子和monkeyrunner