我的情况是我有一个 C++ 工具的单元测试,其中部分测试需要实际运行一个 test-commandline-tool(一旦测试工具结束,这将触发我可以在测试中检查的东西)。
我认为我使用的 C++ 单元测试框架完全不相关,我的问题与合法使用有关system("test_tool.exe ...")
——似乎系统不在C++ 开发人员的首选工具列表中(恕我直言)。
那么,system
已知在单元测试中成功使用了吗?在 UT 环境中使用它执行知名工具时,我是否应该期待任何问题?
对我来说,这是可以接受的使用system
- 但你需要小心“你如何检查 test_tool 是否按照所说的那样做。
但是,希望您的整个测试系统具有合理的安全性,因此恶意用户应该比system
在随机应用程序中的一般使用问题更小。
当然,编写一些使用CreateProcess
或其他“不那么邪恶”的变体的代码也不是那么难system
。使用它可能还会为您提供更多的灵活性和对新启动进程的控制 - 例如,您可以监视进程并告诉它何时完成以及它退出的状态,包括检测它是否正常退出或崩溃。
如果test_tool
是您已安装的工具,则应该没有任何问题。您要避免使用system
甚至部分来自用户输入的字符串(除非您已经真正审查过该输入),并使用它来调用系统特定的命令(因为您的可移植性会下降)。对于后者,您可能希望使用 调用测试system( "test_tool ..." )
,而不使用.exe
.