如何测试 C++ 程序是否 fork() 和 exec() 另一个进程?

问题描述 投票:0回答:1

我正在使用 Google 测试框架。

现在我需要测试我的程序,看看它是否可以

fork()
exec()
另一个子进程在某些条件下具有预期的 cli 参数。

但是

fork()
exec()
是系统调用,而不是常见的函数调用。 我可以不能简单地使用模拟对象捕获调用。

如何做? 谢谢!

c++ fork exec googletest googlemock
1个回答
0
投票

通过依赖注入

使用依赖注入并通过抽象层将系统调用函数注入到生产代码中(请参阅https://stackoverflow.com/a/54148046/7717227

我推荐这种方法,因为它更符合“单元”测试的精神,因为你不会产生新的进程。

通过测试达到预期效果

您还可以测试您期望看到的结果。当

fork
失败时,它会返回
-1
,您可以向上传播它并在单元测试中进行检查。或者,您可以使用另一个系统调用
waitpid
来检查子进程是否正在运行。请参阅:如何检查所有子进程是否结束?

请记住,您

exec
的应用程序应该有自己的单元测试,并且您不应该在这里进行测试。
fork
exec
之间也应该有最小的逻辑 - 理想情况下,任何错误路径都应该在分叉之前在父进程中进行验证。潜在的系统级问题(例如更改用户或达到进程限制)超出了单元测试的范围,属于集成或系统级测试。

© www.soinside.com 2019 - 2024. All rights reserved.