La question courte:Y a-t-il un moyen de réinitialiser un objet Mock dans SimpleTest, en supprimant toutes les attentes?Objets Simples SimpleTest: suppression des attentes
explication plus longue:
J'ai une classe que je teste en utilisant SimpleTest et je rencontre un problème avec les objets Mock qu'il utilise.
La classe est un Logger
, et à l'intérieur de l'enregistreur sont un certain nombre d'objets (Writer
FileWriter
, EmailWriter
, etc.). L'appel de la méthode Logger::log()
exécute une certaine logique dans les coulisses et achemine le message vers le programme d'écriture correct. Les auteurs sont mis en cache dans la classe Logger pour éviter de les ré-instancier chaque fois à chaque fois.
Dans mes tests unitaires, j'ai configuré un Logger, créé et ajouté des objets Mock Writer, puis utilisé des méthodes telles que MockDBWriter->expectOnce()
pour tester le fonctionnement du Logger.
Le problème est maintenant que je veux tester une autre fonction du Logger, mais les attentes expectOnce
sont toujours en vigueur et provoquent l'échec de mes tests suivants.
function testWritesMessageOK() {
$log = Logger::getInstance();
$mock = new MockFileWriter($this);
$log->addWriter($mock);
$mock->expectOnce("write", "Message");
$log->write("Message"); // OK
}
// this is just an example - the actual test is much less inane
function testNumberOfWrites() {
$log = Logger::getInstance();
$mock = $log->getWriter();
$mock->expectCallCount('write', 2);
$log->write("One"); // fail - it doesn't match "Message"
$log->write("Two");
}
est-il un moyen de réinitialiser un objet Mock, en supprimant toutes les attentes?