【发布时间】:2016-11-08 06:33:19
【问题描述】:
假设我有一个自定义集合对象。如何为 remove 方法创建单元测试(没有依赖项)?我必须先调用 add 方法,然后才能删除该项目,因此 remove 方法依赖于 add 方法。在大多数情况下,此自定义集合类将具有一个受保护的属性,其中包括所有添加的集合项。因此我无法模拟 add 方法,因为那时我没有要删除的集合项。
class Item
{
private $identifier;
public function __construct($identifier)
{
$this->identifier = $identifier;
}
public function getIdentifier() { return $this->identifier; }
...
}
class customCollection
{
protected $items = [];
public function add($item) {
$this->items[$item->getIdentifier()] = $item;
}
public function remove($item) {
unset($this->items[$item->getIdentifier()]);
}
public function getItems()
{
return $this->items;
}
}
我可以使用对象聚合并将集合项数组传递给构造函数,并将其用作此自定义集合对象的初始集合项,但如果 add 方法可能修改多个对象属性,这可能会出现问题。那么你将如何解决这个任务或者只是一个集成测试呢?感谢您的反馈!
【问题讨论】:
-
进行单元测试假定大量使用模拟来替换依赖项。我不认为这个特殊情况有什么特别之处,因为不遵循这个提议。只需几行代码,您的测试就是安全的(以及您的生产代码)。
标签: php unit-testing phpunit