2009-03-02 3 views
0

Мы разрабатываем на C++ под Linux и собираемся автоматизировать тесты. Мы намерены использовать платформу тестирования, например CppUnit oder CxxTest. Мы используем Ant для создания программного обеспечения, и мы также будем использовать его для запуска тестов.DbUnit для C++?

Как некоторые тесты будут включать доступ к базе данных, мы ищем инструмент или фреймворк, который облегчает задачи подготовки и очистки тестовых данных в базе данных - так же, как DbUnit (расширение JUnit) в мире Java.

Другим вариантом может быть использование фактического DbUnit - виртуальная машина Java доступна. Использование задачи DbUnit Ant кажется наиболее перспективным. Любые связанные полевые отчеты приветствуются!

ответ

0

Поскольку, как представляется, для разработки на C++ не существует инструмента, подобного DbUnit, мы создали небольшую структуру. В основном это адаптер для вызова реальных операций DbUnit из тестовых серверов C/C++. Он использует Ant tasks, предоставляемый DbUnit.

Мы определили некоторые макросы, такие как TS_DB_INSERT(filename), которые вызывают system("ant -Ddb.dataset=filename db.insert") и т.п.

В этом случае db.insert является целью Ant, выполняющей задачу DbUnit, выполняющую операцию INSERT в базе данных. filename ссылается на набор данных XML, содержащий данные для вставки. Существует также макрос утверждения, который обертывает DbUnit compare.

Тестовый пример может выглядеть следующим образом:

void testDatabaseStuff 
{ 
    TS_DB_INSERT("input.xml"); 

    TestedClass::doSomething(); 

    TS_DB_ASSERT("expected.xml"); 
} 
0

Я полагаю, у вас есть собственный C++ api для работы с БД. Если это правда, вам лучше сделать всю подготовку к своей базе данных самостоятельно. В этом случае вы также проверите свой API БД.

2

Я бы порекомендовал boost unit testing. Вероятно, вам придется использовать настройку и разборку, чтобы вручную очистить базу данных. Конечно, вы можете создать свой собственный C++ DbUnit в ODBC. Если вы дадите мне знать, потому что я тоже могу использовать это!

+0

вручную доступ к базе данных в установке/методы Teardown единичных испытаний также возможны с использованием рамок CxxTest. Есть ли еще одна причина, по которой вы рекомендуете повышение? – 2009-03-03 09:00:43

+0

Большое количество проектов на C++ * уже * использует Boost в той или иной форме. (program_options, shared_ptr, файловая система, ...) Использование Boost для тестирования в этом случае означало бы меньшую зависимость от внешних инструментов, которые я лично всегда считаю победой. – DevSolar