Модульный тест с DBUnit на самом деле не работает. Интеграционный тест с DBUnit делает. Вот почему:
- Юнит тест должен быть быстрым.
- Восстановление базы данных DBUnit происходит медленно. Легко занимает 30 секунд.
- Реальное приложение имеет много не пустых столбцов. Таким образом, данные, выделенные для одной функции, все еще легко используют половину таблиц базы данных.
- Юнит тест должен быть изолирован.
- Восстановление базы данных dbunit для каждого теста, чтобы держать их изолированными, имеет недостатки:
--- Выполнение всех тестов занимает часы (особенно по мере роста приложения), поэтому никто не запускает их, поэтому они постоянно ломаются, поэтому они отключены, поэтому тестирование не выполняется, поэтому ваше приложение полно ошибок.
--- Создание половины базы данных для каждого модульного теста - это большая работа по созданию, большая работа по обслуживанию, которая может легко стать недействительной (что касается проверки, которую не поддерживает схема базы данных, см. Hibernate Validator) и обычно плохо работа по представлению реальности.
Вместо этого, напишите интеграционные тесты с DBunit:
- Один DBunit, одинаковый для всех тестов. Загрузите его только один раз (даже если вы запустите 500 тестов).
- Завершение каждого теста в транзакции и откат базы данных после каждого теста. Большинство методов используют распространение, необходимое в любом случае. Устанавливайте только тестовые данные грязными (чтобы сбросить их в следующем тесте, если есть следующий тест) только тогда, когда для распространения требуется require_new.
- Заполните эту базу с угловыми случаями. Не добавляйте больше общих случаев, чем строго необходимо для проверки ваших бизнес-правил, поэтому обычно только 2 общих случая (чтобы иметь возможность проверить «один ко многим»).
- Написать тесты на будущее:
- Не проверяйте количество активированных правил или количество вставленных фактов.
- Вместо этого проверьте, присутствует ли в результате определенный вставленный факт. Отфильтруйте результат по определенному свойству, установленному в X (отличается от общего значения этого свойства), и проверьте количество вставленных фактов с этим свойством, установленным в X.