【发布时间】:2010-12-10 00:25:39
【问题描述】:
简短的问题: 有没有办法在 SimpleTest 中重置 Mock 对象,消除所有期望?
更长的解释:
我有一个使用 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 对象,消除所有期望?
【问题讨论】:
标签: php unit-testing mocking simpletest expectations