Как я могу проверить через CTest, если существует таблица SQLite, и получить ответ?

Это мой основной код:

   sqlite3 *db;
sqlite3_stmt * stmt;
string sqlstatement = "CREATE TABLE IF NOT EXISTS accounts (account_id integer primary key, balance integer not null)";

if (sqlite3_open("test.db", &db) == SQLITE_OK)
{
sqlite3_prepare( db, sqlstatement.c_str(), -1, &stmt, NULL );//preparing the statement
sqlite3_step( stmt );//executing the statement
}

sqlite3_finalize(stmt);
sqlite3_close(db);

return 0;

и это мой CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.12.2)
enable_testing()
set(TEST_EXE_NAME tests)
add_executable(test main.cpp)
add_executable(${TEST_EXE_NAME} tests.cpp)
add_test(NAME "tests" COMMAND ${TEST_EXE_NAME})
target_link_libraries(tests sqlite3)

Как я могу иметь другой тестовый файл C ++, test.cpp, который проверяет, была ли таблица, упомянутая в main, успешно создана?

Мой тестовый файл имеет следующий код:

string sql = ".tables";
sqlite3 *db;
sqlite3_stmt * stmt;

int rc=0;
if (sqlite3_open("test.db", &db) == SQLITE_OK) {
rc = sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, NULL);
rc = sqlite3_step(stmt);

}
return 0;

Как я могу получить ответ от «.tables»?

0

Решение

sqlite3* database;
sqlite3_open("test.db", &database);
sqlite3_stmt *statement;
if(sqlite3_prepare_v2(database, "select * from accounts;", -1, &statement, 0) == SQLITE_OK)
{
return 0;
}
else {
return -1;

}
0

Другие решения

С sqlite вы можете перечислить все существующие таблицы с прагмой .table, Таким образом, вы можете сделать это с помощью

string sqlstatement = ".table";

и проверьте результат.

Или вы можете сделать это как вызов командной строки sqlite3 с

sqlite3 test.db ".table"

и проверьте результат в c или bash или ctest

Пример для bash

sqlite3 test.db ".table" | grep accounts
if [[ "$?" != "0" ]]; then echo "Rescue the world"; fi

Чтобы использовать его из ctest:

  1. Поместите его в файл сценария, например checkdb.sh

    /usr/local/bin/sqlite3 /path/to/test.db ".table" | grep accounts > /dev/null

  2. Сделайте скрипт исполняемым

    chmod a+x checkdb.sh

  3. Добавьте следующее в ваш CMakeLists.txt

    add_test(NAME check_database COMMAND "checkdb.sh")

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector