逛着博客园,看到乙醇大佬的一篇随笔 https://www.cnblogs.com/nbkhic/p/9370446.html,于是就在想怎么测试这句hello world
print('hello world')
想法是修改stdout的指向到一个io.StringIO流中,然后把流中的数据与‘hello world’去比较,可是写完之后发现,程序虽然没报错,但是流中无数据写入,百思不得其解;只好换成文件流,代码如下:
import sys
def hi():
print('hello world')
if __name__ == '__main__':
old = sys.stdout
with open('test','w') as oFile:
sys.stdout = oFile
hi()
sys.stdout = old
with open('test','r') as oFile:
if 'hello world' + '\n' == oFile.readline():
print('PASS')
else:
print('FAIL',file=sys.stderr)
结果也输出了PASS
C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/test.py
PASS
Process finished with exit code 0
PS:至于比较字符串‘hello world’后面为什么要加个'\n',可以看下print函数说明
def print(*args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
"""
pass