1

我有一系列单元测试,我试图将它们解析成一个文本文件,虽然我知道这可以通过调用 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 重写此代码时遇到了一些麻烦( ) 由于必须提供自定义功能。有没有人对如何进行此操作有任何建议或解决方案?

4

2 回答 2

3

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

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

只是想我会分享这个,这样如果以后有人遇到同样的问题,他们就不会像我一样遇到麻烦。

于 2013-01-14T17:04:24.347 回答
1

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

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)

也许有更好的风格?

于 2013-09-10T21:27:50.967 回答