单元测试

来源:互联网 发布:岂其取之易而守之难乎 编辑:程序博客网 时间:2024/05/22 12:50

前言

Python 自带一个单元测试框架,被恰当地命名为 unittest 模块
编写单元测试应该安排在项目的早期,同时要让它随同代码及需求变更一起更新。很多人都坚持测试代码应该先于被测试代码的,而这种风格也是我在本节中所主张的。

“停止然后着火”

Python 方式的停止并点火实际是引发一个例外。

仅仅在“正常”值时证明方法通过的测试是不够的;你同样需要测试当输入“非法”值时方法失败。但并不是说要枚举所有的失败类型,而是说必要在你预期的范围内失败。

class ToRomanBadInput(unittest.TestCase):def test_too_large(self):'''to_roman should fail with large input'''        self.assertRaises(roman2.OutOfRangeError, roman2.to_roman, 4000)  ③

unittest.TestCase 类提供 assertRaises 方法,该方法需要以下参数:你期望的异常、你要测试的方法及传入给方法的参数。(如果被测试的方法需要多个参数的话,则把所有参数依次传入 assertRaises, assertRaises 会正确地把参数传递给被测方法的。)

请关注代码的最后一行。这里并不需要直接调用 to_roman() ,同时也不需要手动检查它抛出的异常类型(通过 一个 try…except 块来包装),而这些 assertRaises 方法都给我们完成了。你要做的所有事情就是告诉assertRaises你期望的异常类型( roman2.OutOfRangeError)、被测方法(to_roman())以及方法的参数(4000)。assertRaises 方法负责调用 to_roman() 和检查方法抛出 roman2.OutOfRangeError 的异常。

重构

全面单元测试的意思是:无需依赖某个程序员来说“相信我吧。”
这个故事的寓意是什么?

- 简单是一种美德。- 特别在涉及到正则表达式的时候。- 单元测试令你在进行大规模重构时充满自信。

链接

http://old.sebug.net/paper/books/dive-into-python3/unit-testing.html

0 0
原创粉丝点击