Подтвердить что ты не робот

Тестирование данных с помощью jUnit

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

В отличие от параметризованных тестов, это позволяет использовать хорошо известные тестовые примеры.

Ответ 6

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

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

Ответ 7

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

В этой серии публикаций блога есть больше недостатков: http://www.kumaranuj.com/2012/08/junits-parameterized-runner-and-data.html

В настоящее время существует комплексное решение, которое прекрасно сочетается с форматом EasyTest, который представляет собой расширенную структуру JUnit и предназначен для предоставления пользователям большого количества функций. Его основное внимание уделяется проверке данных с использованием JUnit, хотя вам больше не требуется больше полагаться на JUnit. Вот проект github для refernece: https://github.com/anujgandharv/easytest

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

Ответ 8

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

Ответ 9

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

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

Ответ 10

Некоторые тесты позволят управлять интерфейсом.

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