3

我的情况是我有一个 C++ 工具的单元测试,其中部分测试需要实际运行一个 test-commandline-tool(一旦测试工具结束,这将触发我可以在测试中检查的东西)。

我认为我使用的 C++ 单元测试框架完全不相关,我的问题与合法使用有关system("test_tool.exe ...")——似乎系统不在C++ 开发人员的首选工具列表中(恕我直言)

那么,system已知在单元测试中成功使用了吗?在 UT 环境中使用它执行知名工具时,我是否应该期待任何问题?

4

2 回答 2

3

对我来说,这是可以接受的使用system- 但你需要小心“你如何检查 test_tool 是否按照所说的那样做。

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

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

于 2013-07-30T09:24:01.760 回答
1

如果test_tool是您已安装的工具,则应该没有任何问题。您要避免使用system甚至部分来自用户输入的字符串(除非您已经真正审查过该输入),并使用它来调用系统特定的命令(因为您的可移植性会下降)。对于后者,您可能希望使用 调用测试system( "test_tool ..." ),而不使用.exe.

于 2013-07-30T10:00:16.003 回答