PHPUnit setUp用于使用dataProvider进行单独测试

时间:2016-03-07 17:11:33

标签: php unit-testing phpunit runkit

我有一个带有dataProvider testFoo()的PHPUnit测试fooProvider()。在testFoo()开始时我使用Runkit来重新定义一个方法,这样我就可以在该方法返回时重新定义它返回时测试预期结果。但是,重新定义该方法需要一点时间,因此我希望它只能在此测试中发生一次。

PHPUnit框架是否提供了指定我希望在testFoo()运行之前只运行一次的代码的功能,而不是为fooProvider()返回的每个元素运行一次,或者在套件中每次测试运行一次(与setUp()一样)?

1 个答案:

答案 0 :(得分:2)

使用静态私有属性标记方法已重新定义。您需要它是静态的,因为测试类是针对dataProvider提供的每种情况实例化的。

class FooTest extends PHPUnit_Framework_TestCase
{
    private static $redefined = false;

    /**
     * @dataProvider fooProvider
     */
    public function testFoo()
    {
        if (! self::$redefined) {

            // redefinition code goes here

            self::$redefined = true;
        }
    }
}