在PHPUnit中自定义setUp

时间:2010-06-14 16:53:21

标签: php unit-testing testing phpunit

我希望在setUp函数中使用一个具有不同参数的对象运行一系列测试。

我该怎么做?我尝试使用@dataProvider,但这对setUp不起作用我很快发现..

这是我想要做的事情(使用@dataProvider):

/*
* @dataProvider provider
*/
function setUp($namespace, $args) {
   $this->tag = new Tag($namespace, $args);
}

function provider() {
   return array(
      array('hello', array()),
      array('world', array())
   );
}

function testOne() {

}

function testTwo() {

}

结果是testOne()和testTwo()针对名称空间为“hello”的对象和名称空间为“world”的对象

运行

非常感谢任何帮助!

谢谢, 马特

1 个答案:

答案 0 :(得分:10)

如果它不适合测试,则不必将SUT分配给TestCase实例的成员变量。只需在提供程序中创建新的Tag实例,然后将它们传递给测试函数

/**
 * Provides different test Tag instances
 */
function tagProvider() {
   return array(
      array( new Tag( 'hello', array() ) ),
      array( new Tag( 'world', array() ) )
   );
}

/*
* @dataProvider tagProvider
*/
function testOne( Tag $tag ) {
    $this->assertSomething( $tag );
}

如果testOnetestTwo取决于更改的方式更改测试,您可以执行以下操作:

/*
* @dataProvider tagProvider
*/
function testOne( Tag $tag ) {
    $this->assertSomething( $tag );
    return $tag;
}

/*
* @depends testOne
*/
function testTwo( Tag $tag ) {
    $this->assertSomething( $tag );
}

然后testTwo将使用$tag中返回的testOne,以及testOne中对其所做的任何状态更改。