2010-06-14 7 views
3

Je cherche à exécuter un tas de tests avec un objet avec des paramètres différents dans la fonction setUp.Personnalisation de setUp dans PHPUnit

Comment faire? J'ai essayé d'utiliser le @dataProvider, mais cela ne fonctionne pas avec setUp j'ai trouvé rapidement ..

Voici ce que je voudrais faire (en utilisant @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() { 

} 

Le résultat est que testOne() et testTwo() sont exécutés sur un objet avec l'espace de noms "hello" et un objet avec l'espace de noms "world"

Toute aide serait grandement appréciée!

Merci, Matt

Répondre

10

Vous ne devez pas affecter le SUT à une variable membre de l'instance TestCase si elle ne convient pas à l'épreuve. Il suffit de créer de nouvelles instances de balises dans le fournisseur et les transmettre à la fonction de test au lieu

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

Si testOne modifie le test d'une manière qui testTwo dépend des changements, vous pouvez faire:

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

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

Et alors testTwo utilisera le $tag retourné de testOne, avec tous les changements d'état qui lui sont apportés dans testOne.

+0

Parfait. Merci mec! – Matt

+0

Question de suivi @Matt, ai-je besoin de désactiver ces objets Tag que j'ai créés dans tagProvider(), si oui, dois-je les rendre classe variables et unset dans teardown()? – user378132