4
是否可以介绍仅在单元测试期间使用的方法?
最近,我正在开发一种工厂方法。该方法是创建一个普通对象或包装在装饰器中的对象。装饰对象可以是全部扩展StrategyClass的几种类型之一。 在测试中,我想检查返回对象的类是否符合预期。当普通对象os返回时,这很容易,但是将其包装在装饰器中怎么办? 我使用PHP编写代码,因此可以ext/Reflection用来找出一类包装对象,但是在我看来,这似乎使事情变得过于复杂,并且有点像TDD的规则。 相反,我决定引入getClassName()从StrategyClass调用时将返回对象的类名的方法。但是,当从装饰器调用时,它将返回装饰对象中相同方法返回的值。 一些代码使其更清晰: interface StrategyInterface { public function getClassName(); } abstract class StrategyClass implements StrategyInterface { public function getClassName() { return \get_class($this); } } abstract class StrategyDecorator implements StrategyInterface { private $decorated; public function __construct(StrategyClass $decorated) { $this->decorated = $decorated; } public function getClassName() { return $this->decorated->getClassName(); } …