【发布时间】:2014-08-11 20:20:17
【问题描述】:
我正在测试一个注入了依赖项的类。在我的无限聪明中,我在整个代码中分散了对依赖项的类常量的引用。
(对不起这个愚蠢的例子,想偏离 foobar。)
<?php
class Book_PhoneBook extends Book {
private $author;
public function __construct(Author $author) {
$this->author = $author;
}
public function getCover() {
return $this->author->getTitle(Author::NAME_UNKNOWN) . ' - YELLOW PAGES';
}
}
class Author {
const NAME_UNKNOWN = 'anonymous';
public function getTitle($nameStyle) {
//do complicated calculation of author name
if ($nameStyle == $this::NAME_UNKNOWN) {
$name = "Anonymous";
}
//do further complicated calculations, modifying $name
return $name;
}
}
我的问题是单元测试!当我模拟 Author 时,我收到“致命错误:未定义的类常量 'NAME_UNKNOWN'”。模拟的全部目的是避免包含 Author 类文件,那么处理该常量的正确方法是什么?
我可以将Author 拆分为几个对象,或者拆分依赖于常量的方法,但这会导致很多重复。
【问题讨论】:
-
你可以模拟方法。
-
您是否尝试在 Book_PhoneBook 类中使用 $author::NAME_UNKNOWN 来引用常量?毕竟模拟扩展了真实的类。
-
@sectus 我想要 Book_PhoneBook::getCover()。如果我不包含 Author 类(通常在另一个文件中),此测试将失败。我不明白你的评论,我应该嘲笑什么?
-
@gontrollez 你的意思是这样的:
return $this->author->getTitle($this->author::NAME_UNKNOWN) . ' - YELLOW PAGES';?这将导致Parse error: syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)