14.1 我们的程序中有一个方法会将输出发送到标准输出上,我们如何将合适的值答应到标准输出上
- 使用 unittest.mock 模块的 patch函数,可以为单独的测试用例模拟输出大stdout上。不必使用临时变量
def urlprint(protocol,host,domain):
url = '{}://{}.{}'.format(protocol,host,domain)
print(url)
urlprint("http","localhost","com")
[root@apollo gnsun]# python mymodule.py
http://localhost.com
- 内建的print函数会将输出打印到sys.stdout
- 为了测试输出确实会打印到stdout上,可以利用一个对象作为stdout的替身来模拟这种情况,然后对产生的结果进行断言
from io import StringIO
from unittest import TestCase
from unittest.mock import patch
import mymodule
class TestURLPrint(TestCase):
def test_url_gets_to_stdout(self):
protocol = 'http'
host ='localhost'
domain ='com'
expected_url = '{}://{}.{}\n'.format(protocol,host,domain)
with patch('sys.stdout',new=StringIO()) as fake_out:
mymodule.urlprint(protocol,host,domain)
print(self.assertEqual(fake_out.getvalue(),expected_url))
- 在测试完成后,会立刻将所有的东西返回到它的原始状态上。
网友评论