不可测试的基类扩展PHPUnit_Framework_TestCase

总结

如何创建一个扩展PHPUnit_Framework_TestCase的基类,并将其用于对实际测试用例进行子类化,而无需 PHPUnit 测试基类本身?

进一步解释

我有一系列相关的测试用例,我为它们创建了一个基类,其中包含一些由所有测试用例继承的常见测试:

BaseClass_TestCase.php:
class BaseClass_TestCase extends PHPUnit_Framework_TestCase { 
  function test_common() {
    // Test that should be run for all derived test cases
  }
}

MyTestCase1Test.php:
include 'BaseClass_TestCase.php';
class MyTestCase1 extends BaseClass_TestCase {
    function setUp() {
      // Setting up
    }
    function test_this() {
      // Test particular to MyTestCase1
    }
}

MyTestCase2Test.php:
include 'BaseClass_TestCase.php';
class MyTestCase2 extends BaseClass_TestCase {
    function setUp() {
      // Setting up
    }
    function test_this() {
      // Test particular to MyTestCase2
    }
}

我的问题是,当我尝试运行文件夹中的所有测试时,它失败了(没有输出)。

尝试调试时,我发现问题在于基类本身就是PHPUnit_Framework_TestCase的子类,因此PHPUnit也将尝试运行其测试。(在那之前,我天真地认为只有实际测试文件中定义的类 - 以Test结尾的文件名.php - 才会被测试。

由于我的具体实现中的细节,将基类作为测试用例作为上下文运行不起作用。

如何避免测试基类,而只测试派生类?


答案 1

让它抽象,PHPUnit应该忽略它。


答案 2

为避免测试任何文件,可以在文件中将其排除。在你的情况下是整个文件示例phpunit.xml<exclude>./tests/BaseClass_TestCase.php</exclude>


推荐