Python UnitTest 文档中文翻译-0-1(渣翻自娱)

来源:互联网 发布:安卓贪吃蛇大作战源码 编辑:程序博客网 时间:2024/05/16 17:28

写在前面:
渣翻自娱,暑期实习项目django(drf),想学一下单元测试,没看到中文的,正好周末,闲来无事,渣翻渣翻,学习学习,欢迎大佬们指正小弟。

unittest — 单元测试框架

概述

(如果你已经熟悉基本的测试,可以直接去看assert方法列表)

Py的单元测试框架通常会指做 PyUnit,JUnit(java)的Py版本

unittest支持自动化测试:共享 setup shutdown 测试方法代码, 测试代码集成,独立测试报告生成

unittest提供了一系列的类使测试变得更简单

unittest支持这些重要的概念:

测试 fixture :

执行测试所需的准备,以及测试结束的关联清理工作。例如:创建临时或代理数据库、目录、服务器进程

测试用例(case):

用例测试是最小的单元测试。它检查一个具体的输入带来的响应(response)。unittest提供一个基类(BaseClass):TestCase 用来创建新的测试用例。

测试suite :

测试suite可能是测试用例的集合或者测试suite的集合,或者都有。它用来聚合应该一起被执行的测试

测试runner

测试runner是协调测试运行结果和向用户提供结果的重要部分。runner可以使用图形界面接口,或者文本接口,或者返回一个特定值来确认测试执行结果。

用例测试和fixture测试是通过TestCase类和FunctionTestCase类分别支持的。前者应该在创建新测试时使用,后者可以在集成现有的测试代码和一个unittest-driven框架时使用。

当测试fixture时继承TestCase类时,setup() teardown()方法可以被重写来为fixture提供初始化和结束清理操作。

使用FunctionTestCase时,可以将现有的函数传递给构造函数。测试运行时,fixture初始化首先被运行。如果成功了,清除(cleanup)方法会在测试被执行完后执行,而且不会被测试的结果所影响。

每一个TestCase只会运行一个测试方法,所以每个测试都要创建一个新的fixture。

测试suite是由TestSuit类实现。这个类允许单独的测试或者suite测试执行。当执行这个suite测试时,所有的测试直接就被加到suite中,然后在子测试suite中运行。

测试runner只提供了一个run()方法,参数是一个TestCase或者TestSuite对象,并返回一个结果对象(TestResult)。
unittest将TextTestRunner作为一个示例测试runner。它在默认情况下返回标准错误流的测试结果。
可替代的runner也能够在其他环境中(图形用户界面)实现,而并不需要从特定的类中派生出来。

25.3.1基本例子

unittest模块提供了一系列的工具来构建或者运行测试。这部分演示了一小部分工具足够满足大多数用户的需求。

接下来是一个测试字符串方法的小脚本。

import unittestclass TestStringMethods(unittest.TestCase): // 继承TestCase     def test_upper(self):        self.assertEqual('foo'.upper(), 'FOO')// upper    def test_isupper(self):        self.assertTrue('FOO'.isupper())  // isupper        self.assertFalse('Foo'.isupper())    def test_split(self):        s = 'hello world'        self.assertEqual(s.split(), ['hello', 'world'])        # check that s.split fails when the separator is not a string        with self.assertRaises(TypeError):            s.split(2)if __name__ == '__main__': // main    unittest.main()

一个testcase是由unittest.TestCase创建的。 三个单独的测试的名字都是以test开头定义的。这个命名约定告诉runner 哪些方法代表测试。

每个测试的关键是通过assertEqual()来检查预期的结果;assertTrue、assertFalse用来验证一个条件;assertRaises用来验证一个具体的异常是否被抛出。这些方法用来代替assert语句,所以runner就能够积累所有测试结果然后生成报告。

setUp() tearDown()方法用来允许你定义在每个测试执行前和之后要执行的指令。这两个方法之后会更详细的讨论。

上述代码最后的程序块显示了一种简单的运行测试的方法。unittest.main() 提供了一个命令行接口给测试脚本。当从命令行执行时,输出接口如下

...----------------------------------------------------------------------Ran 3 tests in 0.000sOK

还有其他的方法可以代替unittest。.main()

suite = unittest.TestLoader().loadTestsFromTestCase(TestStringMethods)unittest.TextTestRunner(verbosity=2).run(suite)

结构如下:

test_isupper (__main__.TestStringMethods) ... oktest_split (__main__.TestStringMethods) ... oktest_upper (__main__.TestStringMethods) ... ok----------------------------------------------------------------------Ran 3 tests in 0.001sOK

上面的示例展示了最常用的unittest特性,这些特性足以满足许多日常测试需求。

原创粉丝点击