我正在创建一个unittest,我想测试一个方法的输出。我的代码有点大,所以我会用一个小例子。假设我的方法看起来像这样。
def foo():
print "hello"
现在我转到我的unittest类,我在这样的单元测试中运行代码。
def test_code():
firstClass.foo()
我想测试从控制台获得的输出。我看到有些人使用subprocess
,但在那里我只能给出论据。所以我的问题是如何从控制台获取输出以在我的unittest类中测试它。
答案 0 :(得分:1)
一个简单的解决方案是remap stdout to a file并在单元测试类中处理文件执行后的文件。
import sys
sys.stdout = open('result', 'w')
test_code()
# read 'result'
编辑或者,您可以使用StringIO
模块操纵文件流。
import StringIO
output = StringIO.StringIO()
sys.stdout = output
示例:
#!remap.py
import sys
import StringIO
backup_sys = sys.stdout # backup our standard out
output = StringIO.StringIO() # creates file stream for monitoring test result
sys.stdout = output
print 'test' # prints to our IO stream
sys.stdout = backup_sys # remap back to console
print output.getvalue() # prints the entire contents of the IO stream
输出
test