如何编写测试我的c ++的python脚本?

时间:2016-03-04 23:18:44

标签: python instrumentation

说我想测试我的c ++代码,但我不想手工完成。我意识到我可以编写一个可以为我测试代码的python脚本。所以我想测试这个c ++代码,例如:

#include <iostream>
#include <string>
using namespace std;

int main() {
   string line;
   cin >> line;
   cout << line << endl;
}

这是我试图测试这个c ++代码的python脚本:

import subprocess as sb

sb.call("g++ main.cpp", shell=True)
sb.call("./a.out", shell=True)
sb.call("chocolate", shell=True)

这会创建a.out可执行文件,但它不允许我运行我的程序。我怎样才能做到这一点?或者我能做些什么更好的事情?

1 个答案:

答案 0 :(得分:1)

测试可能会变得复杂,但至少可以使用subprocess.Popen对象来管理程序的输入和输出。这是一个极简主义的测试套件

import subprocess as sb
import threading

def timeout():
    print('timeout')
    exit(3)

sb.check_call("g++ main.cpp", shell=True)
t = threading.Timer(10, timeout)
proc = sb.Popen("./a.out", shell=True, stdin=sb.PIPE, stdout=sb.PIPE,
    stderr=sb.PIPE)
out, err = proc.communicate('hello\n')
t.cancel()
assert proc.returncode == 0
assert out == 'hello\n'
assert err == ''
sb.check_call("chocolate", shell=True)