Сценарий: у меня есть объект-значение, который передается по ссылке вокруг нескольких объектов (в данном случае прослушивателей событий) и состояние которых изменяется в одном из объектов. После срабатывания прослушивателей событий происходит еще один вызов, который сохраняет объект в хранилище данных с новым состоянием. Это было исправлено, когда слушатель событий не работал напрямую с объектом значения.
Вопрос: Как я могу написать регрессионный модульный тест, чтобы проверить, что объект значения не изменяется во время сохранения?
Пример:
public function someControllerAction() {
$value = new \stdClass();
$value->property = 'awesome';
$value->type = 'test';
$obj->method($value);
$otherObj-> methodChangesStateButShouldNot($value); // If this method is bad it will change the state of value
// Value needs to be the same state as when it was created
$db->save($value);
}
Если ты имеешь ввиду methodChangesStateButShouldNot()
тогда я не думаю, что вы должны проверить это здесь. Если $otherObj
не должен менять $value
тогда тест в этом другом object::method
должен убедиться, что вход и выход совпадают. Тестирование здесь означало бы создать настоящий экземпляр $otherObj
вместо подделки, а потом, может быть, гораздо больше контекста, и это не является предметом модульного тестирования, не так ли?
Если $otherObj::methodChangesState
был статический метод, вы могли бы сделать это. Просто клонируйте $value
а затем утверждают, что $value
до и после равны.
Других решений пока нет …