Какова стратегия восстановления данных во время модульного тестирования DAO? - PullRequest
2 голосов
/ 06 апреля 2010

Когда я тестирую модуль DAO в JUnit, возникает очевидная проблема: как восстановить данные тестирования в базе данных? Например, запись должна быть удалена в обоих методах тестирования testA () и testB () , что означает, что предварительное условие обоих методов тестирования требует удаления существующей записи. Затем моя стратегия заключается в вставке записи в метод setUp () для восстановления данных.

Какое ваше лучшее решение? Или ваша практическая идея в таком случае? Спасибо

Ответы [ 4 ]

2 голосов
/ 06 апреля 2010

Может быть DBUnit может помочь вам. Это позволяет иметь базу данных TEST в предопределенном состоянии перед выполнением каждого теста. После того, как все настроено, очень легко тестировать приложения, управляемые базой данных.

2 голосов
/ 06 апреля 2010

Я бы сделал метод с именем createRecord().Это может быть и тест-метод.И всякий раз, когда вам нужно создать запись, вызывайте этот метод из других методов тестирования.

1 голос
/ 06 апреля 2010

Простое решение - откатить транзакцию после теста (например, в tearDown()). Таким образом, тесты могут вносить все изменения, которые им нравятся, но они не изменят базу данных (не забудьте отключить autoCommit для соединения).

Есть недостаток: если тест не пройден, вы не можете заглянуть в базу данных, чтобы выяснить, почему. Поэтому большинство моих тестов очищают базу данных перед запуском, и они используют autoCommit, чтобы я мог видеть последнее состояние, в котором произошел сбой, выполнить фиксированный SQL-запрос к данным и т. Д.

1 голос
/ 06 апреля 2010

Божо, конечно, правильно, но просто добавлю немного деталей:

Если возможно, модульные тесты устанавливают свои данные перед манипулированием ими, а затем очищают после себя. Так что в идеале вы не должны попирать существующие данные (возможно, скопированные с производства) для тестирования, а настраивать их как часть теста; это практически единственный способ, которым вы можете быть уверены, что ваш тест будет проверять то, что вы хотели.

...