2010-06-14 64 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