3.2 在Android中进行TDD
Kailuo Wang
3.2.1 问题
模拟支持的缺乏,使得在 Android开发中进行测试驱动的开发(Test-Driven Development,TDD)难以实现。
3.2.2 解决方案
建立两个测试项目:一个用Android工具创建,用于与UI相关的测试,另一个是标准的单元测试项目,用于支持模拟的测试。尽可能将你的逻辑提取到可以进行单元测试的类中。
3.2.3 讨论
在官方文档中,与测试相关的文章大部分都是关于UI测试的。要求必须创建一个Android测试项目,以便对其进行插装和部署,在模拟器环境中测试该应用。测试与UI相关的逻辑很酷而且非常必要,但是这也使模拟变得非常困难。对此有一些解决方案,但是这些方案都有一定的专用性,可能非常费力。如果你后退一步并从较高的层次上去看待这些测试,就会发现它们更像集成测试,而不是纯粹的单元测试。这些测试运行的时间更长,需要准备完整的环境。没有模拟,它们可能需要测试比功能单元更多的内容。所有这些局限性都证明了,必须为这些测试建立不同于常规单元测试“项目/模块”的独立“项目/模块”。我们可以将这种由Android工具创建的“项目/模块”称为XYZ UI测试项目,仅负责测试UI逻辑。然后,你可以和往常一样建立另一个标准单元测试项目,我们称它为XYZ单元测试项目。在这个项目中你可以使用自己喜爱的工具,包括模拟框架。而且,它只测试非UI相关逻辑,避开了所有测试友好性较差的Android UI API。现在,你所需要做的就是尽可能地将逻辑从令人厌恶的UI相关类中提取出来,快乐地进行TDD。