大连Android软件应用系统开发的体系结构非常适于使用MVP模式进行开发。与MVC模式不同,Android中的Activity 并不是一个标准的 Controller,它的首要职责是加载应用的布局和初始化用户界面,同时接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升, Activity类的职责不断增加,以致于变得庞大臃肿。当我们将其中复杂的逻辑处理移至另外一个类(Presneter)中时,Activity其实就是MVP模式中View,它负责UI元素的初始化,建立UI元素与Presenter的关联(Listener之类),同时自己也会处理一些简单的逻辑(复杂的逻辑交由Presenter处理)。
通过这种职责的分离,一方面代码的可读性得到了提高,另一方面我们可以更为方便地通过Mock Activity的方式对各种逻辑(Presenter 中的方法)进行测试。
对于测试环境的搭建和测试Android相关的代码,我们则借助于Robolectric的帮助。
致远服软认为:http://www.soft8.com.cn/Robolectric在其所提供的测试框架中完全模拟了Android SDK的JAR 文件(不会再有恼人的 Stub 异常),它使得我们的测试可以运行于 JVM 之上(速度得到大幅度地提升),因此我们可以用它对 Android 应用进行测试驱动开发。Roblectric 同时实现了 Android 中对 XML的解析,模拟了View、Layout以及资源的加载,它使得Android的环境对于开发人员来说更像是一个黑盒,从而使大连远程会议系统开发人员不用大量使用Mock就可以方便地对资源状态和Android相关的代码进行测试。
Robolectric使用了Javassist 在运行时动态修改Android.jar中类的Byte code,Robolectric会在JVM加载 Android.jar包的时候,重写其中类的方法。Roblectroic会让这些方法有返回值(null 或是0)而不是抛出异常,或者将这些方法调用转向Shadow Objects来模拟Android SDK的实现。Shadow Objects是Robolectric 在运行时插入到Android.jar包相应的类中的,它们会实际处理方法的调用并记录相应的状态,以备在assert的时候进行查询。Robolectric提供了大量的Shadow Objects,覆盖了大连Android软件应用系统开发测试开发过程中绝大多数逻辑功能的需要。
基于大连Android软件应用系统开发的测试需要使用其特定的Test Runner(RobolectricTestRunner)来运行,我们可以通过扩展 RobolectricTestRunner 来创建一个自己的 Test Runner,同时在其构造函数中设定需要加载的AndroidManifest.xml和resource目录。