Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何通过CTest测试SQLite表是否存在并获得响应?_C++_Sqlite_Cmake_Ctest - Fatal编程技术网

C++ 如何通过CTest测试SQLite表是否存在并获得响应?

C++ 如何通过CTest测试SQLite表是否存在并获得响应?,c++,sqlite,cmake,ctest,C++,Sqlite,Cmake,Ctest,这是我的主要代码: 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_prepa

这是我的主要代码:

   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,它测试主表中提到的表是否成功创建? 我的测试文件包含以下代码:

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”中获取响应?

使用sqlite,您可以使用pragma
.table
列出所有现有的表。因此,您可以在c中使用

string sqlstatement = ".table";
并检查结果

或者,您也可以使用

sqlite3 test.db ".table"
并在c、bash或ctest中检查结果

bash示例

sqlite3 test.db ".table" | grep accounts
if [[ "$?" != "0" ]]; then echo "Rescue the world"; fi 
要从ctest使用它,请执行以下操作:

  • 将其放入脚本文件,例如
    checkdb.sh

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

  • 使脚本可执行

    chmod a+x checkdb.sh

  • 将以下内容添加到您的CMakeLists.txt

    添加测试(名称检查数据库命令“checkdb.sh”)


  • 你能不能在CTest中举个例子,因为这是我最初的问题要求的?非常感谢。由于sqlite3的行为,无法从ctest内部调用它,因为它不再退出。但是可以使用脚本。
    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;
    
    }