Короткий вопрос: Есть ли способ сбросить объект-заглушку в SimpleTest, удалив все ожидания?
Более подробное объяснение:
У меня есть класс, который я тестирую с использованием SimpleTest , и у меня возникли некоторые проблемы с объектами Mock, которые он использует.
Класс является Logger
, а внутри регистратора находится ряд Writer
объектов (FileWriter
, EmailWriter
и т. Д.). Вызов метода Logger::log()
выполняет некую закулисную логику и направляет сообщение правильному автору. Писатели кэшируются в классе Logger для сохранения каждого экземпляра каждый раз.
В своих модульных тестах я установил Logger, создал и добавил в него несколько объектов Mock Writer, а затем использовал методы, подобные MockDBWriter->expectOnce()
, чтобы проверить, работает ли Logger.
Теперь проблема в том, что я хочу протестировать другую функцию Logger, но ожидания expectOnce
все еще действуют и приводят к сбою моих последующих тестов.
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");
}
Есть ли способ сбросить объект Mock, убрав все ожидания?