如果 SQLite table 存在并获得响应,我如何通过 CTest 进行测试?
How can I test through CTest if an SQLite table exists and get the response?
这是我的主要代码:
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 中提到的 table 是否已成功创建?
我的测试文件有以下代码:
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 命令行调用来完成
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
add_test(NAME check_database COMMAND "checkdb.sh")
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;
}
这是我的主要代码:
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 中提到的 table 是否已成功创建?
我的测试文件有以下代码:
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 命令行调用来完成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
add_test(NAME check_database COMMAND "checkdb.sh")
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;
}