如果重写setUp和tearDown,则不会调用PHP,phpunit和dbunit - getConnection和getDataSet

问题描述 投票:0回答:1

我正在使用现有的phpunit测试套件,并尝试合并dbunit。特别是,我想使用dataSet抽象来加载fixture数据并在我之后进行清理。我已将PHPUnit_Extensions_Database_TestCase_Trait特性添加到测试用例中,并实现了函数getConnection和getDataSet。但是,这些方法只能由特征的默认setUp和tearDown方法调用。我的许多测试都定义了自己的setUp和tearDown方法。有不同的地方,我应该把这个现有的setUp / tearDown代码,以便我不必从特征覆盖setUp和tearDown?参考代码:

  class FooTest extends \PHPUnit_Framework_TestCase {

    use PHPUnit_Extensions_Database_TestCase_Trait;

    static private $pdo = null;
    private $conn = null;

    public function testTrueIsTrue() {
      $foo = true;
      $this->assertTrue($foo);
    }

    public function setUp() {
      error_log("in setUp");
    }

    public function tearDown() {
      error_log("in tearDown");
    }

    public function getConnection() {
      error_log("in getConnection");
      return $this->createDefaultDBConnection();
    }

    /**
     * @return PHPUnit_Extensions_Database_DataSet_IDataSet
     */
    public function getDataSet() {
      error_log("in getDataSet");
      return new PHPUnit_Extensions_Database_DataSet_DefaultDataSet();
    }
  }
php phpunit
1个回答
1
投票

好的,这是一个特例:

How to override trait function and call it from the overridden function?

所以,我修改了我的use声明:

use PHPUnit_Extensions_Database_TestCase_Trait {
  setUp as protected defaultSetUp;
  tearDown as protected defaultTearDown;
}

并添加了对默认方法的调用:

public function setUp() {
  $this->defaultSetUp();
  error_log("in setUp");
}

public function tearDown() {
  error_log("in tearDown");
  $this->defaultTearDown();
}
© www.soinside.com 2019 - 2024. All rights reserved.