短い質問: SimpleTest で Mock オブジェクトをリセットして、すべての期待を取り除く方法はありますか?
より長い説明:
SimpleTestを使用してテストしているクラスがあり、使用しているモック オブジェクトに問題があります。
クラスは で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");
}
モックオブジェクトをリセットして、すべての期待を取り除く方法はありますか?