Каковы лучшие практики в отношении модульного тестирования библиотеки / фреймворка?

ContextI»

я изо всех сил пытаюсь написать набор юнит-тестов для библиотеки / фреймворка I 'м проектирование. Для контекста, пожалуйста, подумайте о моей библиотеке как об уровне объектов поверх иерархического набора связанных объектов.

Вопрос

В основном яя стараюсь придерживаться принципов и лучших практик в отношении модульного тестирования, как видно изнекоторые посты Вот, но они кажутся противоречивыми в отношении конкретного модульного тестирования библиотеки или фреймворка.

Например, базовый тест касается "создание артефакта ", И еще один с "удаление артефакта ", Но, поскольку предполагается, что модульное тестирование является автономным и восстанавливает состояние мира после его завершения, оба эти теста кажутся в какой-то степени связанными: при тестировании создания артефакта нам необходимо очистить состояние в конце теста, фактически удаляя его Это означает, что удаление артефакта само по себе неявно проверяется. То же самое относится и к тестированию удаления артефактов: чтобы настроить мир таким образом, чтобы удаление артефакта было тестируемым, нам нужно сначала создать новый артефакт.

Ситуация усложняется, когда нам нужно провести модульное тестирование создания и удаления связанных под артефактов, для чего нам необходимо соответствующим образом настроить мир.

Что я'Я склоняюсь к выполнению набора связанных модульных тестов в последовательности, так что каждый модульный тест является дискретным (то есть только тестирует только одну вещь и только одну вещь), но зависит от предыдущих тестов в последовательности для постепенной настройки мира. Тогда моя последовательность может выглядеть так:

[создать артефакт] ->[создать подчиненный артефакт] ->[удалить субартефакт] ->[удалить артефакт]

По этому принципу вся библиотека / фреймворк подвергается модульному тестированию, и состояние мира восстанавливается в конце всего запуска набора тестов. Однако это означает, что любой сбой в середине набора тестов "разбивает мир ".

Каковы некоторые передовые практики и рекомендации, которые могут быть полезны для примирения этих конфликтующих потребностей?

Рекомендации

Что делает хороший модульный тест?

Разве это плохо, когда юнит-тест вызывает другие юнит-тесты?

Ответы на вопрос(6)

Ваш ответ на вопрос