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

写在前面:
渣翻自娱,暑期实习项目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 unittest

class 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.000s

OK

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

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

结构如下:

test_isupper (__main__.TestStringMethods) ... ok
test_split (__main__.TestStringMethods) ... ok
test_upper (__main__.TestStringMethods) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值