Модульное тестирование изменения состояния объекта в нескольких классах в Stack Overflow

Сценарий: у меня есть объект-значение, который передается по ссылке вокруг нескольких объектов (в данном случае прослушивателей событий) и состояние которых изменяется в одном из объектов. После срабатывания прослушивателей событий происходит еще один вызов, который сохраняет объект в хранилище данных с новым состоянием. Это было исправлено, когда слушатель событий не работал напрямую с объектом значения.

Вопрос: Как я могу написать регрессионный модульный тест, чтобы проверить, что объект значения не изменяется во время сохранения?

Пример:

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);
}

1

Решение

Если ты имеешь ввиду methodChangesStateButShouldNot() тогда я не думаю, что вы должны проверить это здесь. Если $otherObj не должен менять $value тогда тест в этом другом object::method должен убедиться, что вход и выход совпадают. Тестирование здесь означало бы создать настоящий экземпляр $otherObj вместо подделки, а потом, может быть, гораздо больше контекста, и это не является предметом модульного тестирования, не так ли?

Если $otherObj::methodChangesState был статический метод, вы могли бы сделать это. Просто клонируйте $value а затем утверждают, что $value до и после равны.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]