在PHPUnit中自定义setUp

Mat*_*att 3 php testing phpunit unit-testing

我想在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() {

}
Run Code Online (Sandbox Code Playgroud)

结果是testOne()和testTwo()针对具有命名空间"hello"的对象和具有命名空间"wor​​ld"的对象运行

任何帮助将不胜感激!

谢谢,马特

Gor*_*don 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 );
}
Run Code Online (Sandbox Code Playgroud)

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

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

/*
* @depends testOne
*/
function testTwo( Tag $tag ) {
    $this->assertSomething( $tag );
}
Run Code Online (Sandbox Code Playgroud)

然后testTwo将使用返回的$tagfrom testOne,以及对其进行的任何状态更改testOne.