Макет базы данных
Я бы написал оболочку для вызовов к базе данных в приложении.
Пример в псевдокоде
CallDataBase (action, options,...) {
// Code for connectiong to DataBase
}
Тогда вы просто высмеиваете эту функцию, просто как любую другую функцию
CallDataBase (action, options,...) {
return true;
}
Таким образом, вы можете издеваться над базой данных, не беспокоясь о том, является ли она веб-службой, подключением к базе данных или чем-то еще. И вы можете заставить его вернуть значение true или что-то еще.
Проверьте, как ваша система обрабатывает ответ базы данных
Чтобы продвинуть эту идею на шаг вперед и сделать ваши тесты еще более мощными, вы могли бы использовать какие-то параметры теста или параметры среды для управления тем, что происходит в методе макета базы данных. Затем вы можете успешно проверить, как ваши коды обрабатывают различные ответы из базы данных.
Снова в псевдокоде (при условии, что ваша база данных возвращает ответ xml):
CallDataBase (action, options,...) {
if TEST_DATABASE_PARAMETER == CORRUPT_XML
return "<xml><</xmy>";
else if TEST_DATABASE_PARAMETER == TIME_OUT
return wait(5000);
else if TEST_DATABASE_PARAMETER == EMPTY_XML
return "";
else if TEST_DATABASE_PARAMETER == REALLY_LONG_XML_RESPONSE
return generate_xml_response(1000000);
}
И соответствующие тесты:
should_raise_error_on_empty_xml_response_from_database() {
TEST_DATABASE_PARAMETER = EMPTY_XML;
CallDataBase(action, option, ...);
assert_error_was_raised(EMPTY_DB_RESPONSE);
assert_written_in_log(EMPTY_DB_RESPONSE_LOG_MESSAGE);
}
...
И так далее, вы поняли.
Обратите внимание, что все мои примеры - это тесты с отрицательным тестом, но, конечно, это можно использовать и для тестирования тестов с положительным тестом.
Удачи