Я новичок в модульном тестировании и только начинаю создавать наборы тестов. У меня будет довольно большой проект, для которого я хочу с самого начала создавать тесты.
Я пытаюсь выяснить общие стратегии и шаблоны для создания наборов тестов. Когда вы смотрите на класс, вы видите много тестов, очевидно, из-за характера класса. Скажем, для класса «учетная запись пользователя» с базовыми операциями CRUD, связанного с таблицей базы данных, мы захотим протестировать - ну, CRUD.
- создание объекта и проверка, существует ли он
- запросить его свойства
- изменить некоторые свойства
- изменить некоторые свойства на неправильные значения
- и удалите его снова.
Что касается того, как что-то сломать, для большинства классов CRUD есть тесты на отказ, например:
- Неверные типы входных данных
- Число в качестве идентификатора ключа, которое выходит за пределы диапазона выбранного типа данных.
- Введите неправильную кодировку символов
- Слишком длинный ввод
И так далее, и так далее.
Для модульного теста, связанного с файловыми операциями, список "критических моментов" может быть таким:
- Недействительные символы в имени файла
- Слишком длинное имя файла
- В имени файла указан неверный протокол или путь
Я почти уверен, что аналогичные шаблоны, применимые не только к модульному тесту, над которым сейчас работает, - можно найти для большинства тестируемых модулей.
Теперь мой вопрос:
Правильно ли я вижу такие «ломаные модели»? Или я что-то совершенно не понимаю в модульном тестировании, и если бы я все сделал правильно, это вообще не было бы проблемой? Является ли модульное тестирование процессом поиска как можно большего числа способов поломки модуля - правильным путем?
Если я прав: существуют ли определения, списки, шпаргалки для таких шаблонов?
Есть ли какие-либо положения (в основном в PHPUnit, поскольку это фреймворк, в котором я работаю) для автоматизации таких шаблонов?
Есть ли какая-либо помощь - в виде контрольных списков или программного обеспечения - для написания полных тестов?