从另一个类获取方法的输出并在unittest中测试它

时间:2017-10-31 11:03:29

标签: python python-2.7 python-unittest

我正在创建一个unittest,我想测试一个方法的输出。我的代码有点大,所以我会用一个小例子。假设我的方法看起来像这样。

def foo():
     print "hello"

现在我转到我的unittest类,我在这样的单元测试中运行代码。

def test_code():
     firstClass.foo()

我想测试从控制台获得的输出。我看到有些人使用subprocess,但在那里我只能给出论据。所以我的问题是如何从控制台获取输出以在我的unittest类中测试它。

1 个答案:

答案 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

More details on the module can be found here.