基于fork()的c++单元测试
C++ Unit Testing based on fork()
所以我有兴趣做一些与内核模块交互的库的单元测试。为了正确地做到这一点,我想确保在每个测试结束时关闭文件句柄之类的东西。唯一可行的方法是在每个测试用例上使用fork()。是否有任何预先存在的单元测试框架可以自动执行此操作?
我所期望的一个例子如下:
TEST() {
int x = open("/dev/custom_file_handle");
TEST_ASSERT_EQUAL(x, 3);
}
TEST() {
int y = open("/dev/other_file_handle");
TEST_ASSERT_EQUAL(x, 3);
}
特别地,在每次测试之后,文件句柄被关闭,这意味着文件描述符在每次测试之后应该是相同的值。
我实际上并没有测试文件描述符的值。这只是一个简单的例子。在我的特殊情况下,任何时候只允许一个用户打开文件描述符。
这是针对Linux平台的,但跨平台的东西会很棒。
Google Test支持fork进程来测试它。但仅限于"退出"和/或"死亡"测试。另一方面,没有什么可以阻止您这样编写每个测试。
理想情况下,我会建议你用不同的方法来处理你的问题。例如,使用相同的Google Test框架,您可以列出测试用例并分别运行它们,因此编写一个简单的包装器,多次调用每个二进制文件来运行不同的测试将解决您的问题。Fork有它自己的问题
默认情况下,C语言的Check单元测试库在单独的子进程中执行每个测试。
它还支持两种不同类型的fixture——一种在每次测试之前/之后在子进程中执行(称为"检查"),另一种在测试套件之前/之后在父进程中执行(称为"未检查"fixture)。
您可以通过环境变量CK_FORK=no
或API调用禁用分叉-例如,简化调试问题。
目前,libcheck运行在Linux, Hurd, bsd, OSX和不同类型的Windows (mingw, non-mingw等)。
相关文章:
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- MS 本机单元测试 - 断言::线程失败不起作用
- 如何获取 CMake 单元测试的相对路径?
- QTimer 超时不会在单元测试中触发
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 在 AtMega32a 上运行的C++的单元测试
- 使用 gtest 框架在单元测试代码中检查目标对象的私有变量的最佳实践是什么?
- 如何用 c++ 编写单元测试?