Как методы, обновляющие таблицы базы данных, должны быть протестированной единицей?

Классы не уникальны по имени. Они уникальны по имени + загрузчик классов.

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

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

7
задан Jordan Parmer 2 December 2008 в 14:02
поделиться

7 ответов

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

8
ответ дан 6 December 2019 в 15:36
поделиться

Если Вы не пишете в базу данных вручную и используете платформу вместо этого (jvm, платформа .NET...), можно безопасно предположить, что платформа пишет в базу данных правильно. То, что необходимо протестировать, - то, если Вы используете платформу правильно.

Просто дразните методы базы данных и объекты. Тест, если Вы перезваниваете им и получаете данные правильно. Выполнение этого даст Вам возможность записать Ваши легче тесты, выполнить их намного больше быстрее и заставить их найти что-либо подобное без проблем вообще.

1
ответ дан 6 December 2019 в 15:36
поделиться

Существует третья опция, которая должна использовать ложный объект доступа к базе данных, который знает, как ответить на обновление, как будто она была подключена к живой базе данных, но она действительно не выполняет запрос против базы данных.

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

3
ответ дан 6 December 2019 в 15:36
поделиться

Если логика обновления сложна затем, необходимо сделать № 2.

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

0
ответ дан 6 December 2019 в 15:36
поделиться

Я использую DBUnit, чтобы загрузить базу данных данными, выполнить логику обновления и наконец считать обновленные данные с базы данных и проверить его. В основном № 2.

0
ответ дан 6 December 2019 в 15:36
поделиться

Они не должны быть единицей, протестированной вообще! Смысл тех методов должен интегрироваться с внешним миром (т.е. база данных). Так, удостоверьтесь, что Ваши интеграционные тесты бьют you-know-what из тех методов и просто забывают о модульных тестах.

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

Помните: целью является 100%-е тестовое покрытие, не 100%-е покрытие модульного теста; это включает все Ваши тесты: единица, интеграция, функциональная, система, принятие и руководство.

1
ответ дан 6 December 2019 в 15:36
поделиться

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

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

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

1
ответ дан 6 December 2019 в 15:36
поделиться
Другие вопросы по тегам:

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