我应该使用std :: system来编写单元测试的脚本吗?

时间:2013-07-30 09:14:27

标签: c++ windows unit-testing cmd

我遇到的情况是我有一个C ++工具的单元测试,其中部分测试需要实际运行一个测试命令行工具(然后会触发一些我可以在测试中检查的测试 - 工具已经结束)。

我认为我使用的C ++单元测试框架非常无关紧要,我的问题与system("test_tool.exe ...")的合法使用有关 - seem system isn't C ++开发人员的顶级工具列表(一般来说,恕我直言)。

那么,system是否已知在单元测试中成功使用?使用它在UT环境中执行一个众所周知的工具时,我是否应该遇到任何问题?

2 个答案:

答案 0 :(得分:3)

对我而言,这是system的可接受用途 - 但您需要注意“如何检查test_tool是否按照惯例执行。

但是,希望您的整体测试系统具有合理的安全性,因此恶意用户应该比在随机应用程序中system的一般用法更少。

当然,编写一些使用CreateProcess或其他“不那么邪恶”的变体而不是system的代码也不难。使用它可能还会为您提供更多的灵活性和对新启动过程的控制 - 例如您可以监控该过程并告知其完成时间以及退出状态,包括检测它是否正常退出或崩溃。

答案 1 :(得分:1)

如果test_tool是您安装的工具,则不应该 任何问题。您要避免使用system 一个字符串,甚至部分来自用户输入(除非 你真的审查了那个输入),并用它来调用系统 特定的命令(因为你的可移植性消失了)。 关于后者,您可能想要调用测试 使用system( "test_tool ..." ),不使用.exe