使用自定义函数将单元测试读取到python中的文件

时间:2013-01-11 19:00:04

标签: python unit-testing file-io

我有一系列的单元测试,我试图解析成一个文本文件,虽然我知道这可以通过调用unittest.main()的一些不同用途来实现,但我有一点点打嗝,因为我正在处理的代码需要使用一个函数。它目前写成

unittest.TextTestRunner(verbosity=2).run(customFunction())

其中带有

的另一个文件读取了stdout
p = Popen(command, stdout=PIPE, stderr=STDOUT stdin=PIPE)
result = p.communicate()

# Write result to .txt file

唯一的问题是程序在将结果变量分配给控制台输出时由于单元测试必须调用的其他程序而挂起。我正在尝试重写代码以使单元测试本身吐出到日志文件中(而不是将控制台输出解析为文本文件),但是我在使用unittest.main重写这个问题时遇到了一些小问题( )由于必须提供自定义功能。有没有人对如何做到这一点有任何建议或解决方案?

2 个答案:

答案 0 :(得分:3)

我发现了如何自己完成这个:有一个可以与TextTestRunner一起使用的流选项,它将unittest的输出指向你想要的任何文件对象。所以如果你想写一个txt文件,你会写:

logFile = open("C:/folder/logfile.txt", "w")
unittest.TextTestRunner(stream=logFile, verbosity=2).run(customFunction())
logFile.close()

我认为我会分享这个,以便如果有人在以后遇到同样的问题,他们就不会遇到我所做的那样。

答案 1 :(得分:1)

当我们在Python中使用stream时,会更好地为问题代码区域提供捕获器,并再次确保我建议使用这样的结构:

stream = open("...", "w")
try:
    unittest.TextTestRunner(stream=stream, verbosity=2).run(suite)
finally:
    stream.close()

但是在我看来,这个捕手代码很大,而且写起来更容易:

with open("...", "w") as stream:
    unittest.TextTestRunner(stream=stream, verbosity=2).run(suite)

也许有更好的风格?