Unit testing 编写测试套件

Unit testing 编写测试套件,unit-testing,phpunit,Unit Testing,Phpunit,我知道每个人都同意这样一个事实:单元测试应该是统一的。但是如果你读了这本书,你会发现有构建测试套件的空间 第七章。组织测试 PHPUnit的目标之一(参见第2章)是测试应该是可组合的:我们希望能够同时运行任意数量或组合的测试,例如整个>项目的所有测试,或者是项目一部分组件的所有类的测试,或者只是单个类的测试 示例7.2:使用XML配置编写测试套件 <phpunit> <testsuites> <testsuite name="Object_Freezer

我知道每个人都同意这样一个事实:单元测试应该是统一的。但是如果你读了这本书,你会发现有构建测试套件的空间

第七章。组织测试 PHPUnit的目标之一(参见第2章)是测试应该是可组合的:我们希望能够同时运行任意数量或组合的测试,例如整个>项目的所有测试,或者是项目一部分组件的所有类的测试,或者只是单个类的测试

示例7.2:使用XML配置编写测试套件

<phpunit>
  <testsuites>
    <testsuite name="Object_Freezer">
      <file>Tests/Freezer/HashGenerator/NonRecursiveSHA1Test.php</file>
      <file>Tests/Freezer/IdGenerator/UUIDTest.php</file>
      <file>Tests/Freezer/UtilTest.php</file>
      <file>Tests/FreezerTest.php</file>
      <file>Tests/Freezer/StorageTest.php</file>
      <file>Tests/Freezer/Storage/CouchDB/WithLazyLoadTest.php</file>
      <file>Tests/Freezer/Storage/CouchDB/WithoutLazyLoadTest.php</file>
    </testsuite>
  </testsuites>
</phpunit>
为什么这么糟糕?从您的角度来看,将A::A中的代码复制到B::B类,然后将A::A和B::B中的代码复制到C::C类是否更好


我想学习你心目中的最佳实践。。我以前总是使用测试套件,单元测试非常适合测试独立的功能,但当您需要测试依赖于dpeendencies的整个服务时,它会稍微复杂一些。。我是否应该完全放弃对谁的测试,你建议用什么来替代?

我将写下与markus tharkun讨论的记录:

PHPUnit旨在进行单元测试,这意味着:


单元测试的要点在于“单元”这个词,它意味着您想要测试独立的单元,而不是整个服务。如果每个小单元都能工作,那么代码也能工作。单元测试并不意味着测试整个体系结构是否合理

正如我问他的那样,如果您正在测试一个具有依赖性的函数,那么您可以向该函数注入一个模拟对象。您应该模拟该函数的所有外部依赖项,包括安全层、用户对象、数据库访问等等。如果确实无法模拟依赖项,那么可以使用@depends,但应该避免这种情况


马库斯建议我使用嘲弄框架:

每个人都分享什么事实?什么是单一的?例如,单元测试的重点在“单元”一词中,这意味着您希望测试独立的单元,而不是整个服务。如果每个小单元都能工作,那么代码也能工作。单元测试并不意味着测试您的整个体系结构是否合理。IMO UNIMONITY意味着独立的和功能集中的DOK,那么为什么PHPUnit提供了谁的功能,并在其文档中对其进行了一定程度的提升?
A {
    function a()
    {
        return $data;
    }
}
B {
    /**
    * @depends A::a
    */
    function b($data)
    {
        return $data2;
    }
}
C {
    /**
    * @depends B::b
    */
    function c($data2)
    {
    }
}