我遇到的情况是我有一个C ++工具的单元测试,其中部分测试需要实际运行一个测试命令行工具(然后会触发一些我可以在测试中检查的测试 - 工具已经结束)。
我认为我使用的C ++单元测试框架非常无关紧要,我的问题与system("test_tool.exe ...")
的合法使用有关 - seem system isn't C ++开发人员的顶级工具列表(一般来说,恕我直言)。
那么,system
是否已知在单元测试中成功使用?使用它在UT环境中执行一个众所周知的工具时,我是否应该遇到任何问题?
答案 0 :(得分:3)
对我而言,这是system
的可接受用途 - 但您需要注意“如何检查test_tool是否按照惯例执行。
但是,希望您的整体测试系统具有合理的安全性,因此恶意用户应该比在随机应用程序中system
的一般用法更少。
当然,编写一些使用CreateProcess
或其他“不那么邪恶”的变体而不是system
的代码也不难。使用它可能还会为您提供更多的灵活性和对新启动过程的控制 - 例如您可以监控该过程并告知其完成时间以及退出状态,包括检测它是否正常退出或崩溃。
答案 1 :(得分:1)
如果test_tool
是您安装的工具,则不应该
任何问题。您要避免使用system
一个字符串,甚至部分来自用户输入(除非
你真的审查了那个输入),并用它来调用系统
特定的命令(因为你的可移植性消失了)。
关于后者,您可能想要调用测试
使用system( "test_tool ..." )
,不使用.exe
。