2010-04-27 6 views
1

J'ai un certain nombre d'objets dans mon système qui implémentent l'interface PHP SPL Iterator. En les écrivant, j'écris aussi des tests.Y at-il des cas de test SimpleTest open source qui testent les interfaces PHP SPL?

Je sais que les tests d'écriture ne sont généralement PAS un travail de coupure et de collage. Mais, quand il s'agit de tester des classes qui implémentent des interfaces de la bibliothèque PHP standard, il est certainement logique d'avoir quelques extraits de script qui peuvent être empruntés et déposés dans une classe Test - uniquement pour tester cette interface particulière.

Il semble raisonnable de les rendre publics. Alors, je me demandais si vous en connaissiez?

+0

Mise à jour. J'ai trouvé [cet article] (http://www.giorgiosironi.com/2009/09/practical-testing-in-php-part-2-write.html), qui ne répond pas à la question, mais propose quelques types de tests pouvant être exécutés sur un objet itérable. Ce qui est inspirant. –

Répondre

0

Un truc rapide et sale pour se moquer d'un itérateur est juste de stocker un ArrayIterator avec des objets fantaisie et l'utiliser comme votre itérateur fantaisie

$mockIt = new ArrayIterator; 
$mockIt->append($mock1); 
$mockIt->append($mock2); 
$mockIt->append($mock3); 

$sut = new SystemExpectingAnIterator($mockIt); 
$this->assertTrue($sut->doSomethingWithIterator()); 

Il est un peu mauvais, mais plus simple que moqueur tous les SPL Iterator méthodes

+0

Merci Ken, c'est une information utile. Cependant, il s'agit plutôt d'un moyen de tester un objet qui * utilise * un itérateur plutôt qu'un objet qui teste un objet qui * implémente * l'interface de l'itérateur. Toujours très pratique - donc merci. –

+0

Désolé JW, j'ai mal interprété votre question. En ce qui concerne les tests sur les objets qui implémentent Iterator, ne serait-ce qu'une simple foreach? – Ken

+0

Pas de problèmes - Je suis toujours heureux de voir des réponses. En ce qui concerne le «foreach», je ne pense pas que cela donnera un vrai test. De mémoire, foreach va «travailler» sur une variable non-iterator-compatible afin que tous les tests à l'intérieur de la boucle ne puissent jamais être atteints. J'ai réussi à tester l'interface - donc ce n'est pas trop un problème. Mais cela semble être une situation où beaucoup de gens ont probablement déjà été là, donc supposé qu'il pourrait y avoir une solution prête à l'emploi là-bas. –