PHPUnit说我不会将参数传递给父类方法。我是

时间:2013-03-20 14:30:26

标签: php unit-testing phpunit

我有一个扩展抽象父类的测试类。父类扩展PHPUnit_Framework_TestCase,它定义了所有测试将使用的一些方法。

我在调用父母方法时遇到问题。 Phpunit说我没有提供任何参数,但我是。

这是孩子的方法

public function testEmptyGarbageNullDataDoesntValidate() {
    $rule = new Rule\Between( 1, 10 );
    $this->testNullDataDoesntValidate( $rule );
    // $this->testEmptyDataDoesntValidate( $rule );
    // $this->testGarbageDataDoesntValidate( $rule );
}

这是父方法

public function testNullDataDoesntValidate( \Validator\Rule $rule ) {
    $this->validator->addRule( 'null', $rule );
    $this->assertFalse( $this->validator->validate( array( 'null' => null ) ) );
}

我收到了错误

  

传递给BaseRuleTest :: testNullDataDoesntValidate()的参数1必须   是Validator \ Rule的实例,没有给出

这是说没有给出,但是给出了它。我可以进入孩子的函数和var_dump( $rule )并查看数据,它肯定存在。

这是父方法

中的var_dump
object(Validator\Rule\Between)#210 (2) {
  ["min_value":protected]=>
  int(1)
  ["max_value":protected]=>
  int(10)
}

我认为它与phpunit的工作方式有关。我是phpunit的新手。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

尝试将testNullDataDoesntValidate重命名为不以test开头的内容。

实际测试的函数以" test"开头。见这里:http://www.phpunit.de/manual/3.6/en/writing-tests-for-phpunit.html

因为这使它们成为实际测试,所以phpunit不带参数调用它。

答案 1 :(得分:2)

  

传递给BaseRuleTest的参数1 :: testNullDataDoesntValidate()必须是Validator \ Rule的实例,没有给出

错误来自PHPUnit尝试调用 test 方法,而不是来自调用该方法的代码。

如果你已经包含了堆栈跟踪(安装xdebug以便始终看到它),那就很明显了。