如何在PHPUnit中测试依赖于外部集合的类?
我的一个类,如何在PHPUnit中测试依赖于外部集合的类?,php,unit-testing,phpunit,Php,Unit Testing,Phpunit,我的一个类,Foo,有一个方法,Foo::bar(),它依赖于注入的集合,BazCollection,以及从该集合的项中提取的值。我需要对Foo::bar()进行单元测试,但我不知道如何正确地模拟BazCollection依赖项,这样它就不会破坏Foo::bar()的内部实现 例如: class Foo { public function bar(BazCollection $bazzes) { foreach ($bazzes as $baz) {
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() { /* ... */ }
}
为了隔离和测试Foo::bar()
逻辑,我如何正确模拟BazCollection
我假设创建
BazCollection
的实际实例是不允许的,因为我的测试将取决于BazCollection
是否正常工作?此链接应该为您指明方向:您的问题有点复杂(不完整?)。是什么导致您将这两个集合模拟为它包含的bazzes?进一步:为什么在迭代器上使用bar()方法运算符?例如,为什么不在foreach中调用它,这样就只在baz/上为baz使用操纵方法,而不为集合使用操纵方法?