如何使用其依赖项运行PHPUnit测试

时间:2014-11-08 11:41:35

标签: php unit-testing phpunit

我的设置是这样的:

class MyTest extends PHPUnit_Framework_TestCase
{
    // More tests before

    public function testOne()
    {
        // Assertions

        return $value;
    }

    /**
     * @depends testOne
     */
    public function testTwo($value)
    {
        // Assertions
    }

    // More tests after
}

我想专注于testTwo,但当我phpunit --filter testTwo时,我得到这样的信息:

This test depends on "MyTest::testOne" to pass.
No tests executed!

我的问题:有没有办法运行一个带有所有依赖项的测试?

3 个答案:

答案 0 :(得分:2)

没有开箱即用的方式自动运行所有依赖项。但是,您可以使用@group注释将测试分组,然后运行phpunit --group myGroup

答案 1 :(得分:0)

我知道,这也不太方便,但你可以试试

phpunit --filter 'testOne|testTwo' 

根据phpunit docs,我们可以使用regexps作为过滤器。

您也可以考虑使用data provider为第二次测试生成值。但请注意,数据提供程序方法将始终在所有测试之前执行,因此如果处理繁重,可能会降低执行速度。

另一种方法是创建一些辅助方法或对象,它将执行一些实际的作业和缓存结果,以供各种测试使用。然后,您不再需要使用依赖项,您的数据将根据请求生成,并缓存以供不同的测试共享。

class MyTest extends PHPUnit_Framework_TestCase
{

    protected function _helper($someParameter) {
        static $resultsCache;
        if(!isset($resultsCache[$someParameter])) {
            // generate your $value based on parameters
            $resultsCache[$someParameter] = $value;
        }
        return $resultsCache[$someParameter];
    }

    // More tests before

    public function testOne()
    {
        $value = $this->_helper('my parameter');
        // Assertions for $value

    }

    /**
     * 
     */
    public function testTwo()
    {
        $value = $this->_helper('my parameter');
        // Get another results using $value

        // Assertions
    }
    // More tests after
}

答案 2 :(得分:0)

使用正则表达式

phpunit --filter='/testOne|testTwo/'