Вопрос

Что вы используете для написания тестов на основе данных в JUnit?

(Мое определение) тест, управляемый данными, - это тест, который считывает данные из некоторого внешнего источника (файла, базы данных, ...), выполняет один тест на строку / файл / что угодно и отображает результаты в тестовом окне, как если бы у вас были отдельные тесты - результат каждого запуска отображается отдельно, а не в одном огромном агрегате.

Это было полезно?

Решение

В JUnit4 вы можете использовать параметризованный testrunner для управления данными тесты.

Это не очень хорошо документировано, но основная идея заключается в создании статического метода (с пометкой @Parameters ), который возвращает массивы коллекций объектов. Каждый из этих массивов используется в качестве аргументов для конструктора тестового класса, а затем обычные тестовые методы могут быть запущены с использованием полей, установленных в конструкторе.

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

Другие советы

Здесь сияет TestNG со своим @DataSource. Это одна из причин, почему я предпочитаю это JUnit; остальные - это зависимости и параллельные многопоточные тесты.

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

Я использую комбинацию dbUnit , jMock и jUnit 4. Затем вы можете запустить его как suite или отдельно

Вам лучше расширить TestCase с помощью " DataDrivenTestCase " это соответствует вашим потребностям. Вот рабочий пример: http://mrlalonde.blogspot.ca/2012/08 /data-driven-tests-with-junit.html

В отличие от параметризованных тестов, он допускает хорошо названные тестовые случаи.

Я с @ DroidIn.net, это именно то, что я делаю, однако, чтобы ответить на ваш вопрос буквально " и отображать результаты в тестовом центре, как если бы у вас были отдельные тесты, " Вы должны взглянуть на параметризованный бегун JUnit4. DBUnit этого не делает. Если вам нужно сделать много, честно говоря, TestNG более гибок, но вы можете сделать это в JUnit.

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

Хотя это довольно старая тема, я все еще думал о том, чтобы внести свой вклад. Я чувствую, что поддержка JUnit для тестирования, основанного на данных, менее и слишком недружественная. например чтобы использовать параметризованный, нам нужно написать наш конструктор. С Thener Runner у нас нет контроля над набором тестовых данных, которые передаются в метод теста.

В этой серии сообщений блога есть и другие недостатки: https://github.com/anujgandharv/easytest

Если кто-то заинтересован поделиться своими мыслями / кодом / предложениями, то сейчас самое время. Вы можете просто зайти в репозиторий github и создать проблемы.

Обычно управляемые данными тесты используют небольшой тестируемый компонент для обработки данных. (Объект чтения файлов или фиктивные объекты) Для баз данных и ресурсов за пределами приложения макеты используются для аналогии с другими системами. (Веб-сервисы, базы данных и т. Д.). Обычно я вижу, что существуют внешние файлы данных, которые обрабатывают данные и вывод. Таким образом, файл данных может быть добавлен в VCS.

В настоящее время у нас есть реквизит с нашими идентификационными номерами. Это ужасно хрупко, но легко что-то сделать. Наш план состоит в том, чтобы изначально эти ID-номера были переопределены свойствами -D в наших сборках ant.

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

Некоторые тесты пригодны для интерфейса.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top