c - 如何导致sqlite3_initialize失败

标签 c unit-testing sqlite

我有以下使用 sqlite3 的 C 代码:

if(SQLITE_OK == sqlite3_initialize()) {
    self->db_open_result = sqlite3_open(self->db_uri, &(self->db));
} else {
    self->db_open_result = SQLITE_ERROR;
}

显然,我非常有信心代码是正确的并且会按预期运行。但是,我正在使用 gcov/lcov 测量单元测试的代码覆盖率,我很好奇在这种情况下如何使覆盖率达到 100%。正常情况下,sqlite3_initialize()永远不会失败,因此else子句永远不会执行。

有没有一种方法可以导致此失败而不完全造成破坏?

最佳答案

您希望单元测试来测试您的代码。但您还想知道所有测试代码都已正确执行。一种方法是使用“模拟”,即用假库或“模拟”库替换实际库(例如 SQLite),然后针对这些假库运行程序。

这个库替换是在编译时还是运行时完成确实是偶然的,但在 C 中,在编译时完成它更容易。您可以手动进行此模拟,也可以使用诸如Cmock之类的工具。 .

在伪造的库中,您会引发各种错误和失败。值得注意的是,伪造的库甚至不需要做任何事情,甚至不需要跟踪大部分或任何状态,您通常可以通过返回“OK”或“FAIL”来取得很大的进展。

关于c - 如何导致sqlite3_initialize失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10774356/

相关文章:

sql - 将文件导入SQLite时如何忽略损坏的行?

c - 在没有相应值的情况下在 printf() 中使用格式说明符

在没有运行 Wireshark 的情况下无法在 C 中嗅探 UDP 数据包

c# - 如何在 .NET Core 中使用 xUnit 测试 Xamarin ViewModel?

android - RecipeApp 的 SQLite 数据库(一对多关系)

sqlite - SQlite3查询:查找不属于值列表的行。优化

c++ - 在不修改源代码的情况下将库函数标记为已弃用/不可用

C程序编译问题

visual-studio-2008 - 我应该使用 vs2008 中的内置工具进行单元测试吗?

javascript - 如何在不重复父类(super class)测试的情况下在 Mocha 中测试 Backbone 子类?