简体   繁体   English

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

[英]PHPUnit setUp to run for an individual test with dataProvider

I have a PHPUnit test testFoo() with a dataProvider fooProvider() . 我有一个带有dataProvider fooProvider()的PHPUnit测试testFoo() fooProvider() At the beginning of testFoo() I'm using Runkit to redefine a method so I can test expected results when that method is returning what I've redefined it to return. testFoo()的开头我正在使用Runkit来重新定义一个方法,这样我就可以在该方法返回时重新定义它返回时测试预期结果。 However, redefining the method is a little time-intensive, so I'd like for it to only happen once for this test. 但是,重新定义该方法需要一点时间,因此我希望它只能在此测试中发生一次。

Does the PHPUnit framework provide functionality to specify code that I'd like to run just once before testFoo() runs and not once for each element returned by fooProvider() or once per test in the suite (as with setUp() )? PHPUnit框架是否提供了一些功能来指定我想在testFoo()运行之前运行一次的代码,而不是fooProvider()返回的每个元素运行一次,或者套件中每次测试运行一次(与setUp() )?

Use a static private property to flag that the method has been redefined. 使用静态私有属性来标记方法已重新定义。 You need it to be static because the test class is instantiated for each case provided by the dataProvider. 您需要它是静态的,因为测试类是针对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;
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM