PHPUnit3.7 学习笔记 第二章 PHPUnit的目标(转译www.phpunit.de)

 

到目前为止,我们只有两个针对内置函数count()的方法测试用例。当我们开始测试大量PHP提供的函数时,我们将需要为他们每个写 一个测试。我们可以写为这些测试从头开始写测试框架。然而,最好是写一个测试底层框架,而为每个测试基于这个底层框架上写一些个性的一部分。 PHPUnit 就是这么一个底层框架。

    一个框架,像PHPUnit需要确定一系列约束,而这些约束总有一部分是互相冲突的。同时,测试应该有如下特征:

    易学

      如果他很难学写怎么去写测试用例,开发者将不过学习去写他们。

    易写

      如果测试案例不是容易写出的的,开发者不会去写这些的。

    易读

      测试代码应该不包含额外的开销 以致 测试用例本身不会迷失在繁多的代码中。

    易执行

      测试应该可以以一个的明显的按钮运行,并且能得到清晰明了的格式展现他的结果。

    快速执行

      测试应该能快速运行,以便他们能每天执行成百上千次。

    独立性

      测试用例不能相互影响。如果测试用例中任意一个运行顺序改变了,缺不应该改变测试的结果。

    可组合性

      我们应该可以将一些测试用例组合在一起进行运行。只是一个独立性必然的结果。

    在这些约束中有两个主要的冲突:
   
易学易写于易写相冲突
    测试用例一般不要求一种编程语言的所有灵活性。许多测试工具提供它本身支持的最低限度的必要功能的语言脚本。测试结果是易读易写的,是因为他们没有被测试的内容所干扰。然后学习另外一种程序语言和一系列的程序工具让人的脑子很觉得很麻烦的。
 
独立性于快速执行想冲突
    如果你想要其中一个测试用例的结果不被其他测试的结果所影响,那么每个测试用例应该在他开始执行时创造所有所需的环境状态,并且在他完成时,返回原有的环境状态。然而,建立环境需要花费很多时间,例如,连接一个数据库和用户真实数据,初始化数据库到一个已知的状态。
 
PHPUnit 试图用作为测试语言的PHP解决这些冲突。有时写一个小的直线测试时,用全部功能的PHP有点杀鸡焉用牛刀的感觉,但是如果程序员已经准备就绪的情况下, 用PHP能利用大量的经验和工具进行开发。而我们将试图说服不情愿的测试者,降低写初始化测试用例的障碍是十分重要的事情。
 
PHPUnit 在独立性这方面比快速执行上有些问题。独立测试是有价值的,因为他提供了高质量的反馈。你没有获得一堆测试失败的报告,这很有可能是一个测试在一系列失败 的开始,抑或是测试的环境出问题了。针对独立性的测试鼓励设计大量的简单对象。每个对象能被快速的独立的测试。结果是更好的设计和更快测试。

     


      PHPUnit 假定大多数测试都是成功的,并且是不知道报告成功测试的细节。当一个测试失败时,这个事实是没有价值的和值得报告的。绝大部分的测试都是成功的,除了计数 的测试其他没有什么值得评论的。真实构成报告类型的只是一种假设,你会看到很多测试被执行,但是一般只是看这些失败的细节。

      测试被期望是一个细粒度的,是测试时一个对象的一个方面。因此,首次的测试失败,测试执行的暂停,PHPUnit报告这个失败。将测试分解成很多小测试运行是一种艺术。细粒度的测试提升系统的总体设计。

      当你测试用PHPUnit测试一个对象时,你只有通过这个对象的公有接口。测试基于公有可见的行为,鼓励在槽糕的设计的结果影响系统的大部分之前,更早的去面对和解决困难的设计问题。
posted @ 2014-10-15 15:04  b13272012771  阅读(249)  评论(0编辑  收藏  举报