Тестирование блока DatabaseOpenHelper в Android

Я написал несколько модульных тестов для уже существующего класса DatabaseOpenHelper. Я рассмотрел сценарий создания и переход от старой схемы к новой. К сожалению, я не чувствую, что мои тесты хороши. Например, для создания БД я проверяю, что SQLiteDatabase. execSQL() был вызван три раза (у нас есть три таблицы до сих пор) и проверьте, что строка запроса находится в набор заданных строк SQL.

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

Но каковы другие способы тестирования модулей схемы SQL? Или у вас нет модульных тестов для этого и полагайтесь только на интеграцию?

7 голосов | спросил Eugen Martynov 29 SatEurope/Moscow2012-12-29T22:55:59+04:00Europe/Moscow12bEurope/MoscowSat, 29 Dec 2012 22:55:59 +0400 2012, 22:55:59

3 ответа


1

Вместо того, чтобы проверить, что

  • colum1 - это имя,
  • colum2 - день рождения,
  • colum3 is ....

Я бы просто проверить, существуют ли эти столбцы после обновления.

Чтобы сделать это, я бы создал интеграционный тест, который

  • начинается с файла базы данных, который имеет старую версию базы данных,
  • запустите программу обновления, а затем
  • выполнить sql-select для каждой таблицы со всеми полями.

Пример:

  • выберите имя, день рождения, номер телефона от клиента
  • выберите orderid, orderdate, customerid из заказа

Test-Success означает, что исключение базы данных для неизвестной таблицы или поля отсутствует.

[Обновление 2.2.2013] Unittesting DatabaseOpenHelper (Unittest = Тестирование по отдельности) потребовал бы проверки без реальной базы данных и проверки подлинности сценария обновления базы данных или, по крайней мере, содержащего все необходимые поля /таблицы. На мой взгляд, это большая работа. Тестирование интеграции с реальной базой данных намного проще.

ответил k3b 30 SunEurope/Moscow2012-12-30T18:51:28+04:00Europe/Moscow12bEurope/MoscowSun, 30 Dec 2012 18:51:28 +0400 2012, 18:51:28
0

Может быть полезно сравнение схемы. У вас есть одна база данных, которая, как известно, имеет «правильную» схему. Это может быть копией базы данных разработки после замораживания кода. Затем создайте новую базу данных. Используйте инструмент сравнения, чтобы определить любые различия между двумя базами данных. Microsoft Visual Studio поставляется с инструментом сравнения схем. Существует несколько сторонних инструментов. Я использую собственный собственный инструмент сравнения, в котором перечислены все различия в 2 базах данных.

В качестве альтернативы вы можете просто проверить, выполняются ли сценарии создания схемы без ошибок. Скрипты ARE определение схемы, поэтому теоретически вам не нужно сравнивать или проверять что-либо, кроме факта, который они выполнили без ошибок.

Но по моему опыту люди вводят изменения в базу данных без их скриптинга. Инструмент сравнения может перехватывать эти неписанные изменения.

ответил mike30 30 Jam1000000amWed, 30 Jan 2013 01:12:57 +040013 2013, 01:12:57
0

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

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

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

Мне не нравится время, необходимое для этого подхода, но это лучший справедливый подход, который я нашел.

ответил Borja Bolilla 1 FebruaryEurope/MoscowbFri, 01 Feb 2013 22:11:57 +0400000000pmFri, 01 Feb 2013 22:11:57 +040013 2013, 22:11:57

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132