PHPUnit setUp()从未调用过

时间:2014-08-28 22:15:31

标签: php unit-testing oop inheritance phpunit

当我运行phpunit时,我的灯具是空的。我在setUp()中初始化了fixture,但我的调试显示它从未被调用过。我尝试在子类中为成员变量分配正确的值,但它们保持为null,这令我难以置信。

// Unit/Base.Unit.php 
Class BaseUnit extends PHPUnit_Framework_TestCase {
  // Tests for Base Object methods
}

// Unit/Validation/Validation.Unit.php
Class ValidationUnit extends BaseUnit {
  protected $validationClass;
  protected $validData;
  protected $invalidData;

  protected function newValidationInstance($data) {
    return new $this->validationClass($data); 
  }

  public function testValidData() {
    $instance = $this->newValidationInstance($this->validData);
    $this->assertEquals('true', $instance->isValid());
  }
  // ... other tests for validation ...
}

// Unit/Validation/Email.Test.php
Class EmailTest extends ValidationUnit {
  protected function setUp() {
    $this->class = "Email";
    $this->validData = "test@gmail.com";
    $this->invalidData = "fdksljfa"; 
  }
}

运行PHPUnit ...

phpunit --bootstrap /some/config.php Unit/

PHPUnit 4.2.2 by Sebastian Bergmann.

.E
Fatal error: Class name must be a valid object or a string in /opt/bitnami/some/path/Unit/Validation/Validation.Unit.php on line 9

我期待发生的是phpunit在EmailTest上启动测试,并在其中运行测试及其父类。 Validation类有很多子类(Email,ZipCode等),因此在Validation中进行所有测试都是一个巨大的胜利。

但我不能调用setUp(),所以我无法实例化正确的Validation类。

修改

事实证明,在类中的任何测试之前调用setUp(),其中setUp()是在中定义的,而不是在其他测试之前,包括在父类中的测试。

因此,为了控制测试的顺序,我让每个类定义一个包含它的测试的invokeTests()函数,然后调用它的父调用invokeTests()方法。这样,将对OO层次结构执行测试。

0 个答案:

没有答案