我在制作Android应用程序方面拥有丰富的经验。对于我的新项目,我们决定进行测试驱动开发(TDD)。我一直在使用Robotium进行用户场景测试,它工作正常,看起来也很简单。
对于单元测试,我尝试使用(MockContext Android Class)模拟Context,但我无法这样做。我浏览了这个博客http://sites.google.com/site/androiddevtesting/并通过这个http://sdudzin.blogspot.com/2011/01/easy-unit-testing-for-android.html,这表明Android应用中的模拟仍然非常有限且很难,并建议使用PowerMock,jMockit,JeasyTest或Roboelectric(与之结合使用) Mockito和Maven)甚至是RoboGuice。
我想得到你们的任何建议,你认为哪个单元测试框架最适合测试Android应用程序。 (特别是测试Android类,可能会提供模拟上下文和其他模拟功能,以便我可以使我的测试用例尽可能独立)。任何建议或指示都会有所帮助。谢谢
答案 0 :(得分:30)
对于设备外测试,请查看Robolectric
对于设备上测试,请查看Borachio
底线:做起来仍然非常非常困难。事情正在改善(今天的情况比6个月前要好得多)但Android是我编写过的最具测试敌意的环境。
答案 1 :(得分:17)
要在Android中执行TDD,我个人使用以下所有内容:
另外:使用依赖注入库(例如Dagger或Roboguice)将大大简化您的单元/集成测试。要在多个设备上运行测试,请考虑使用Spoon。
答案 2 :(得分:4)
下面给出一个例子。单击按钮时,活动将显示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有相当好的支持。为了测试,我们已经从ActivityInstrumentationTestCase2转移到Robolectric,只是为了在开发阶段挖掘JVM的绝对速度。 Android测试框架非常适合集成和功能测试,而不适用于单元测试。
答案 3 :(得分:2)
要为Android应用TDD,Android Testing Codelab对您非常有帮助。代码实验室展示了测试工具的使用以及如何为Android应用TDD。我试过它,这对我非常有帮助。
奖励:检查Clean Architecture
答案 4 :(得分:1)
Android Testing Support Library为测试Android应用提供了广泛的框架。该库提供了一组API,允许您快速构建和运行应用程序的测试代码,包括JUnit 4和功能用户界面(UI)测试。您可以从Android Studio IDE或命令行运行使用这些API创建的测试。
了解更多关于:
谢谢:)
答案 5 :(得分:0)
我们有
https://developer.android.com/training/testing/start/index.html
并且能够测试本地(在JVM上运行)和仪器测试(在设备或仿真器上运行)
为此,我们需要添加
Android Testing Support Library
Android SDK包含两个用于功能级应用测试的工具
猴子和monkeyrunner