2014-11-08 52 views
3

我的设置是这样的:如何运行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! 

我的问题:有没有办法运行一个测试及其所有的依赖关系?

回答

2

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

+0

更为可惜,有没有简单的方法来做到这一点!组可以工作,但需要与经常要测试的路径一样多的组 - 结束于* n *组中的重要依赖项,其中* n *是依赖测试的数目。这是一团糟,应该有一个更简单的方法!我[提出了一个建议](https://github.com/sebastianbergmann/phpunit/issues/2166) – artfulrobot 2016-05-16 11:35:33

0

我知道了,这也没多大方便,但你可以尝试

phpunit --filter 'testOne|testTwo' 

据我们可以使用正则表达式作为过滤PHPUnit的文档。

另外,您可以考虑使用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 
} 
0

使用正则表达式

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