2010-06-14 49 views
3

我正在运行一组测试,其中一个对象在setUp函数中具有不同的参数。在PHPUnit中自定义设置

我该怎么做?我尝试使用@dataProvider,但是,这并不与设置工作我很快就找到了..

这是我想什么(使用@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”的对象运行的

任何帮助将不胜感激!

谢谢, 马特

回答

10

您不必到SUT分配给TestCase的实例的成员变量,如果它不适合测试。只需在供应商创造新的标签实例,并将它们传递给测试功能,而不是

/** 
* 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); 
} 

如果testOne改变的方式测试testTwo依赖于变化,你可以这样做:

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

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

而且那么testTwo将使用testOne中返回的$tag以及testOne中对其进行的任何状态更改。

+0

完美。谢啦! – Matt 2010-06-15 03:30:51

+0

@Matt后续问题,我是否需要取消设置我在tagProvider()中创建的那些Tag对象,如果是这样,我应该让它们成为类变量并且在拆卸()时取消设置吗? – user378132 2014-07-18 16:04:33