• 代码段中 1 部分声明了大连企业软件开发测试运行的 test runner;就像普通的单元测试,它也分为了set up、method invoke 以及assert 三个阶段。
• 在代码段 2 部分测试初始化了一个 Activity 用于提供 Context 并使用这个 Activity 对象生成了一个SignInScreen实例。
• 第二个阶段,也是代码段3 部分中,代码在生成的登录界面中找到注册按钮并进行点击。最为有意思的第三个阶段需要验证注册按钮的点击触发了我们期望的事件,即使用Implicit Intent 来打开WebPageActivity。
• 为了进行这个验证,代码段4 部分中首先通过Robolectric 的静态方法shadowOf 来获取activity对象相应的Shadow Object,而通过它,代码获得了activity对象的所开启的 Intent 对象;最后通过 Intent 对象的 Shadow Object,我们可以获得其 intent class并进行验证。
通过这个大连企业软件开发测试我们可以看到,有了Robolectric的帮助,我们可以轻松地生成Activity实例,加载XML布局文件,进行组件上的方法调用。通过Shadow对象,我们则可以获取Android相关类的对象状态信息,来对测试的结果进行验证。实际上除了Intent,我们还可以通过使用Robolectric对代码中的Dialog、HTTP请求、数据库操作等各个方面进行测试。
致远服软认为:http://www.soft8.com.cn/,Robolectric 并没有为 Android SDK 中的所有类都定义 Shadow 对象,我们可以通过调用Robolectric.getDefaultShadowClasses()方法来查看所需要的类是否已经在需要被 Shadow 的类列表中注册了。如果没有我们可能需要对其进行定制和扩展。关于如何添加 Shadow Objects而增加Robolectric的功能,在Robolectric的网站文档中有详细的描述。
由于大连企业软件开发测试是可以脱离Android的SDK运行于JVM上的,我们就可以像运行普通的JUnit测试一样在IDE中或者在终端使用构建脚本运行我们的测试。
因为Robolectric的更新并不是很频繁,我们在平时也遇到了一些需要定制的情况,如支持 Android 4.0,使用 Sonar 进行项目质量分析等,所以我们在 GitHub 上 fork 了 Robolectric的工程,而且以Git Submodule 的方式将其加入到我们的工程管理中来,这样,我们就可以根据自己的需要来对Robolectric进行修改和扩展。由于我们对Robolectric的修改频率非常低,在每一次修改后,可以将其编译打包成一个JAR文件,将这个JAR文件加入到我们的工程管理中,让我们的测试代码仍然依赖于这个JAR文件,这样可以在运行测试中免去对Robolectric的不必要的重复编译,加快测试代码的运行速度。
我们在当前的项目中也进行开发OA系统代码的验收测试脚本是开发人员与BA以及QA进行沟通的一种重要途径,也是开发人员和QA进行人工测试的基准,因此我们仍然选用了Cucumber作为我们编写脚本的工具,再使用cuke4duke和JRuby对其进行解析和执行。但目前这种测试方式似乎并不成熟,我们在这种尝试和实践的过程中遇到了种种的问题,主要在于测试编写和维护上的困难,这也导致了我们验收测试的覆盖率并不高。我们也会在这一方向上进行更多的尝试,如果大家有更好的关于验收测试自动化方面的实践,也希望能够得到你们的帮助和指正。