我正在进行单元测试,作为我的实习生的一部分。我的老板总是告诉我,找到一种自动化方法是最好的方法,我想知道是否可以使用python,编写一个脚本,读取具有特定结构和语法的文本文件,然后生成一个基于所述文本文件的c ++文件?
我正在使用Google-Test进行单元测试,我认为这对公司工具来说是一个很好的补充,但我只想知道它是否可能以及是否有其他人做过类似的事情。
谢谢!
答案 0 :(得分:7)
是的,这肯定是可行的。之前我已经完成了这个(我们在内部使用Python来创建一些C ++代码来读写结构)。你可以使用自定义脚本(比如@Kevin在他的评论中说, easy ),或者你可以使用像Cog这样的Python工具,如果你想要一个更结构化的方法
与任何事情一样,存在权衡。使用Python生成C ++代码意味着开发人员可以学习另一种语言(不是很重要,Python值得学习并很好地补充C ++),并且在开发和构建中有额外的间接层次进程,以及需要维护的额外(Python)代码。如果你走这条路,请记住简单是一种美德;不要试图写歌,跳舞,并生成各种可以想象的C ++代码"框架。
答案 1 :(得分:2)
如果你想要扩大规模,Josh的答案是好的,但我想你想看看它在行动中的简单例子。大多数工作都是使用subprocess
模块完成的。在这里,我使用Linux机器,因此我的编译器是gcc
,但是相对容易看到如何使它依赖于您的特定系统架构。
import subprocess
code = r'''
#include <stdio.h>
int main() {
for(int i=0;i<5;i++) {
printf("Testing %d\n",i);
}
return 0;
}
'''
f_cpp = "test.cpp"
with open(f_cpp,'w') as FOUT:
FOUT.write(code)
# Compile the program
f_exec = "./myprogram"
compile_cmd = "gcc {} -o {}".format(f_cpp, f_exec)
subprocess.call(compile_cmd, shell=True)
# Run the program
p = subprocess.Popen(f_exec, shell=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
# Step through the output
for line in p.stdout:
print line
这给出了输出:
Testing 0
Testing 1
Testing 2
Testing 3
Testing 4