我正在测试一个使用Redis的类:
<?php
class Publisher {
function publish($message) {
Redis::publish($message);
}
}
class Foo {
public function publishMessage() {
$message = $this->generateMessage();
$this->publish($message);
}
private function publish($message) {
$this->getPublisher()->publish($message);
}
// below just for testing
private $publisher;
public function getPublisher() {
if(empty($this->publisher) {
return new Publisher();
}
return $this->publisher;
}
public function setPublisher($publisher) {
$this->publisher = $publisher;
}
}
现在我不知道如何测试这个功能。当然,我不想测试Redis本身。我实际上需要测试的是发送到Redis的消息是否符合我的预期(我想)。 我可以编写一个公共函数来返回消息,但我不喜欢这个想法。 在这个例子中,我让设置发布者成为可能,因此在测试时我可以返回另一个Publisher类。 它不会发送消息,而是将其保存在内部,以便稍后进行断言。
class Publisher {
public $message;
function publish($message) {
$this->message = $message;
}
}
但我不知道如何模拟Publisher类以更改方法。或者我必须继承Publisher类。 这种方式,我的被测试类必须包含仅用于测试的代码。我也不喜欢这样做。 我该如何正确地测试呢? Redis有一个模拟库,但不支持发布。