Skip to content

第十四章:测试、调试和异常

01 测试 stdout 输出

问题

给定一个输入,相应的输出能正常显示出来

  • 使用 unittest.mock 模块中的 patch() 函数,可以为单个测试模拟 sys.stdout 然后回滚, 并且不产生大量的临时变量或在测试用例直接暴露状态变量。
解决方案

作为一个例子,我们在 mymodule 模块中定义如下一个函数:

# mymodule.py

def urlprint(protocol, host, domain):
    url = '{}://{}.{}'.format(protocol, host, domain)
    print(url)
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 = 'www'
        domain = 'example.com'
        expected_url = '{}://{}.{}\n'.format(protocol, host, domain)

        with patch('sys.stdout', new=StringIO()) as fake_out:
            mymodule.urlprint(protocol, host, domain)
            self.assertEqual(fake_out.getvalue(), expected_url)
讨论

02 在单元测试中给对象打补丁

问题

解决方案


讨论


03 在单元测试中测试异常情况

问题

解决方案


讨论


04 将测试输出用日志记录到文件中

问题

解决方案


讨论


05 忽略或期望测试失败

问题

解决方案


讨论


06 处理多个异常

问题

解决方案


讨论


07 捕获所有异常

问题

解决方案


讨论


08 创建自定义异常

问题

解决方案


讨论


09 捕获异常后抛出另外的异常

问题

解决方案


讨论


10 重新抛出被捕获的异常

问题

解决方案


讨论


11 输出警告信息

问题

解决方案


讨论


12 调试基本的程序崩溃错误

问题

解决方案


讨论


13 给你的程序做性能测试

问题

解决方案


讨论


14 加速程序运行

问题

解决方案


讨论


总结

总结