Предположим, у меня есть собственный объект коллекции. Как я могу создать единичный тест (без зависимостей) для метода удаления? Сначала я должен вызвать метод add, чтобы потом удалить этот элемент, и поэтому метод remove имеет зависимость от метода 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;
}
}
Я мог бы использовать агрегацию объекта и передать массив элементов коллекции конструктору и использовать это в качестве исходных элементов коллекции этого объекта на заказ коллекции, но это может быть проблемой, если метод добавить, возможно, изменить несколько свойств объекта , Итак, как бы вы решили эту задачу или это просто тест интеграции для этого? Спасибо за отзывы!
Выполнение модульного тестирования предполагает интенсивное использование mocks для замещения зависимостей. я не вижу, чтобы этот конкретный случай был особенным для того, чтобы не следовать этому предложению. просто пара строк и ваш тест в безопасности (и ваш производственный код тоже). – xmike