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