Каковы лучшие практики в отношении модульного тестирования библиотеки / фреймворка?
я изо всех сил пытаюсь написать набор юнит-тестов для библиотеки / фреймворка I 'м проектирование. Для контекста, пожалуйста, подумайте о моей библиотеке как об уровне объектов поверх иерархического набора связанных объектов.
ВопросВ основном яя стараюсь придерживаться принципов и лучших практик в отношении модульного тестирования, как видно изнекоторые посты Вот, но они кажутся противоречивыми в отношении конкретного модульного тестирования библиотеки или фреймворка.
Например, базовый тест касается "создание артефакта ", И еще один с "удаление артефакта ", Но, поскольку предполагается, что модульное тестирование является автономным и восстанавливает состояние мира после его завершения, оба эти теста кажутся в какой-то степени связанными: при тестировании создания артефакта нам необходимо очистить состояние в конце теста, фактически удаляя его Это означает, что удаление артефакта само по себе неявно проверяется. То же самое относится и к тестированию удаления артефактов: чтобы настроить мир таким образом, чтобы удаление артефакта было тестируемым, нам нужно сначала создать новый артефакт.
Ситуация усложняется, когда нам нужно провести модульное тестирование создания и удаления связанных под артефактов, для чего нам необходимо соответствующим образом настроить мир.
Что я'Я склоняюсь к выполнению набора связанных модульных тестов в последовательности, так что каждый модульный тест является дискретным (то есть только тестирует только одну вещь и только одну вещь), но зависит от предыдущих тестов в последовательности для постепенной настройки мира. Тогда моя последовательность может выглядеть так:
[создать артефакт] ->[создать подчиненный артефакт] ->[удалить субартефакт] ->[удалить артефакт]
По этому принципу вся библиотека / фреймворк подвергается модульному тестированию, и состояние мира восстанавливается в конце всего запуска набора тестов. Однако это означает, что любой сбой в середине набора тестов "разбивает мир ".
Каковы некоторые передовые практики и рекомендации, которые могут быть полезны для примирения этих конфликтующих потребностей?
РекомендацииЧто делает хороший модульный тест?
Разве это плохо, когда юнит-тест вызывает другие юнит-тесты?