我的一个类Foo
有一个方法Foo::bar()
,它依赖于一个注入的集合BazCollection
,以及从该集合的项目中提取的值。我需要单元测试Foo::bar()
,我无法弄清楚如何正确模拟BazCollection
依赖项,以免它破坏Foo::bar()
的内部实现。
所以,例如:
class Foo {
public function bar(BazCollection $bazzes) {
foreach ($bazzes as $baz) {
// Do something with $baz->boz(), and modify $result
}
return $result;
}
}
class BazCollection implements IteratorAggregate {
protected $_bazzes;
public function getIterator() {
return new ArrayIterator($this->_bazzes);
}
}
class Baz {
public function boz() { /* ... */ }
}
如何正确模拟BazCollection
以隔离和测试Foo::bar()
逻辑?
我认为创建BazCollection
的实际实例是禁忌,因为那时我的测试将取决于BazCollection
正常工作吗?