函数 foo
打印到控制台。我想测试控制台打印。如何在 python 中实现这一点?
需要测试这个功能,没有返回语句:
def foo(inStr):
print "hi"+inStr
我的测试:
def test_foo():
cmdProcess = subprocess.Popen(foo("test"), stdout=subprocess.PIPE)
cmdOut = cmdProcess.communicate()[0]
self.assertEquals("hitest", cmdOut)
最佳答案
您可以通过将 sys.stdout
临时重定向到 StringIO
对象来轻松捕获标准输出,如下所示:
import StringIO
import sys
def foo(inStr):
print "hi"+inStr
def test_foo():
capturedOutput = StringIO.StringIO() # Create StringIO object
sys.stdout = capturedOutput # and redirect stdout.
foo('test') # Call unchanged function.
sys.stdout = sys.__stdout__ # Reset redirect.
print 'Captured', capturedOutput.getvalue() # Now works as before.
test_foo()
这个程序的输出是:
Captured hitest
显示重定向成功捕获了输出,并且您能够将输出流恢复到开始捕获之前的状态。
请注意,如问题所示,上述代码适用于 Python 2.7。 Python 3 略有不同:
import io
import sys
def foo(inStr):
print ("hi"+inStr)
def test_foo():
capturedOutput = io.StringIO() # Create StringIO object
sys.stdout = capturedOutput # and redirect stdout.
foo('test') # Call function.
sys.stdout = sys.__stdout__ # Reset redirect.
print ('Captured', capturedOutput.getvalue()) # Now works as before.
test_foo()
关于Python:为控制台打印编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33767627/