Помогите написать JUnit для JDBC - PullRequest
1 голос
/ 04 февраля 2011

Я создал один класс, в который я вставляю значения в SQL следующим образом:

  public class ABC{
     some code here..........
   ...............
    public void insertUsers(String firstName,String lastName,String location){
      pre.setString(1,firstName);

Я создал тестовый класс для этого класса.

Я хочу написать контрольный пример для этого метода insertUsers (), используя оператор assert. как написать утверждение assert для вышеуказанного метода.

Ответы [ 4 ]

2 голосов
/ 04 февраля 2011

Ну, если вы действительно хотите протестировать обновление вашей базы данных, вы можете это сделать. Обычно люди следуют одному из следующих двух подходов -

  1. Использовать Spring AbstractTransactionalDataSourceSpringContextTests Это позволяет добавить любые значения в базу данных, а затем Spring позаботится и вернет введенные значения.

  2. Используйте отдельную базу данных только для ваших тестов JUnit. Тебе действительно не нужно ничего тяжелого. Вы можете использовать что-то вроде HSQLDB , который действительно является легкой базой данных Java. Это позволит вам иметь отдельные тестовые данные из вашей производственной / QA базы данных.

После того, как все вышеперечисленное выполнено (и вы выполнили оператор вставки), просто запустите оператор SELECT из вашего JUnit, чтобы получить данные, а затем сравните предыдущие данные с фактическими данными.

2 голосов
/ 04 февраля 2011

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

Для вас это означает, что переменную conn (я полагаю, это соединение БД) необходимо отключить.,Вы можете сделать это легко с помощью чего-то вроде внедрение зависимостей , что означает, что вы передаете вещи в свой класс при его создании.В этом случае вы должны передать интерфейс, который имеет необходимые функции, используемые conn.

Затем в производстве вы передаете реальный объект соединения БД, в то время как в тесте вы передаете имит, которым вы управляете.Следовательно, вы можете проверить, что ABC вызывает и делает ли то, что вы ожидаете, с conn.То же самое касается pre, который вы используете.

Вы можете видеть это так: я хотел бы протестировать класс ABC, и для этого мне нужно увидеть, как он использует pre и conn, поэтому я заменяю их своими собственными тестовыми реализациями, которые я могу проверить после выполнения чего-либо с помощью ABC.

Чтобы конкретно помочь вам в том, что вы делаете, вам нужно показать, что pre и скажите нам, что вы собираетесь проверить.

1 голос
/ 04 февраля 2011

Пара замечаний.

Я бы использовал стандарт assert только во время разработки.Он проверит условие и выдаст исключение времени выполнения, если условие оценивается как ложное.

Если вы ожидаете недопустимые аргументы, то гораздо лучше добавить некоторый «нормальный» код в метод для обработки этих значений или броситьIllegalArgumenException и запись в журнале.

Не закрывайте соединение этим методом!Делайте это только , когда вы открываете / создаете соединение тем же способом.В более крупных приложениях вы не сможете узнать , кто закрыл соединение через некоторое время.Если вызывающий insertUsers открыл соединение, вызывающий должен сам его закрыть!

(возможна дополнительная помощь, если вы сообщите нам , что именно вы хотите проверить - параметры метода или есливставка прошла успешно)

0 голосов
/ 04 февраля 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...