持续集成过程中,在代码提交到持续集成服务器后,需要进行提交测试。为了更加高效地完成提交测试,我们可以参考下列实践:
为了追求快速提交和反馈,提交测试应以单元测试为主,避免对用户界面进行测试。因为用户界面测试会花费大量的时间。一是由于界面测试会涉及到多个软件部件,这就需要我们花很多时间和精力去准备,才能让测试运行起来;二是界面测试需要手工操作的,而手工操作的速度与自动化测试相比,是相当慢的。
依赖注入(或控制反转)是一种基于面向对象的设计模式,用于描述如何从对象外部建立对象间的关系。使用依赖注入可以让测试变得更容易。
如果提交测试需要调用数据库,将会极大延长测试的时间。因为需要提前准备数据库中的数据,而且由于需要重复测试,要确保每次测试的数据一致还需要清库等更多的操作。所以,提交测试要避免调用数据库。如果你的单元测试不得不调用数据库的话,那可能是你的代码在复杂性隔离方面做得不够好。
异步行为会令单元测试变得困难。要避免单元测试中的异步行为,最简单的办法就是当一个单元测试用例运行到异步点时,将其切分出来作为另一个测试用例再开始执行。
使用测试替身是单元测试的常见技术,而且它也是快速完成单元测试的技术。
时间问题是自动化测试需要面对的问题,因为我们总会遇到一些需要定时或延时处理的功能。所以,如果你的代码将时间和真实的系统时间绑定的话,这些功能的单元测试会很难进行。 所以,在代码中我们应将对时间的请求抽象到一个类中。比如,使用依赖注入把用到的系统时间行为注入到包装类中。这样我们就可以为这个类的行为进行打桩或模拟,完成单元测试。
除了以上几个提交测试的优秀实践之外,还有两个小妙招儿能加快提交测试的运行。一是将提交测试分成多个套件,在多台机器上并行执行这些套件。记住:
二是不断优化用于提交测试的测试用例,将那些运行时间较长且不易失败的测试放到验收测试阶段运行。 这正是: 使用替身和依赖,减少测试时间长 不断优化和改进,提交测试有模样 参考书目:持续交付:发布可靠软件的系统方法,作者:[英]Jez Humble,David Farley,译者:乔梁,出版社:人民邮电出版社 |
|