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

使用自定义函数将单元测试读取到python中的文件,python,unit-testing,file-io,Python,Unit Testing,File Io,我有一系列的单元测试,我正试图将它们解析成一个文本文件,虽然我知道这可以通过调用unittest.main的一些不同用途来实现,但我有点犹豫,因为我正在处理的代码需要使用一个函数。它目前写为 unittest.TextTestRunner(verbosity=2).run(customFunction()) 其中的标准输出由另一个具有 p = Popen(command, stdout=PIPE, stderr=STDOUT stdin=PIPE) result = p.communicate

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

unittest.TextTestRunner(verbosity=2).run(customFunction())
其中的标准输出由另一个具有

p = Popen(command, stdout=PIPE, stderr=STDOUT stdin=PIPE)
result = p.communicate()

# Write result to .txt file

唯一的问题是,当将结果变量分配给控制台输出时,由于单元测试必须调用一些其他程序,程序挂起。我试图重写代码,让单元测试本身吐出到日志文件中,而不是将控制台输出解析到文本文件中,但是由于必须提供自定义函数,我在使用unittest.main重写时遇到了一些问题。有人对如何进行此操作有任何建议或解决方案吗?

我自己发现了如何进行此操作:有一个流选项可用于TextTestRunner,它将unittest的输出定向到您想要的任何文件对象。因此,如果您想写入txt文件,您可以编写:

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

我只是想和大家分享一下,这样以后如果有人遇到同样的问题,他们就不会遇到我所遇到的fustration。

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

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

我只是想与大家分享这一点,这样以后如果有人遇到同样的问题,他们就不会遇到我所遇到的fustration。

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

stream = open("...", "w")
try:
    unittest.TextTestRunner(stream=stream, verbosity=2).run(suite)
finally:
    stream.close()
但在我看来,这个catcher代码是一个很大的代码,这样写比较容易:

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

也许有更好的风格?

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

stream = open("...", "w")
try:
    unittest.TextTestRunner(stream=stream, verbosity=2).run(suite)
finally:
    stream.close()
但在我看来,这个catcher代码是一个很大的代码,这样写比较容易:

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

也许有更好的样式?

有没有办法将输出重定向到日志文件和控制台。您的示例将输出重定向到日志文件,并且在控制台上不打印任何内容。您是否尝试过使用问题中的原始示例?如果您没有我在原始帖子中所做的相同限制,您可能可以使用与我不得不使用的不同的方法。是否有方法将输出重定向到日志文件以及控制台。您的示例将输出重定向到日志文件,并且在控制台上不打印任何内容。您是否尝试过使用问题中的原始示例?如果你没有我在原始帖子中所做的限制,你可能会使用一种不同于我不得不使用的方法。