作者:奋斗0000012003 | 来源:互联网 | 2022-12-26 19:05
我正在测试的类在更深的地方使用Redis:
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的消息是否符合我的期望。(我认为)我可以编写一个返回消息并公开的函数。但是我不喜欢那个主意。在此示例中,我可以设置发布者,因此在测试时我可以返回另一个发布者类。与其发送消息,不如将其保存在内部,以便稍后声明。
class Publisher {
public $message;
function publish($message) {
$this->message = $message;
}
}
但是然后我不知道如何模拟Publisher类来更改方法。否则我将不得不继承Publisher类。同样,通过这种方式,我的测试类必须包含仅用于测试的代码。我也不喜欢。
我该如何正确测试?存在用于Redis的模拟库,但不支持发布。