python从入门到实践读书笔记(七)

python从入门到实践读书笔记(七)

tag: python从零开始学习
种一棵树最好的时候,十年前或者今天!

第十一章 测试代码

非常重要,程序员的工作主要不是敲代码,而是设计和维护代码,而测试代码就非常重要了

学习使用python模块unittest中的工具来测试代码。

单元测试:用来核实函数的每个方面没有问题。
一般,普通的项目只对代码的重要行为编写测试,当项目被广泛使用时再考虑全覆盖测试。

测试用例需要导入unittest模块和需要测试的模块,
其类名最好与要测试的函数相关,并包含关键字Test,并且该类必须继承unittest.TestCase类。
断言方法:用来核实得到的结果是否与期望的结果一致。

测试函数

运行结果与预期的一致

# 导入python标准库中的unittest模块
import unittest
from name_fuction import get_formatted_name

class NmaesTestCase(unittest.TestCase):
    """测试name_fuction.py"""

    def test_frist_last_name(self):
        """能够正确地处理姓名吗?"""
        formatted_name = get_formatted_name('jans', 'green')
        self.assertEqual(formatted_name, 'Jans Green')

unittest.main()
测试错误

例如,在函数中增加一个参数。
测试报告;会反馈通过的和错误的数量。

def get_formatted_name(first, mid, last):
    full_name = first + " " + mid + " " + last
    return full_name

unittest断言

自动化的测试中, 对于每个单独的case来说,一个case的执行结果中, 必然会有期望结果与实际结果, 来判断该case是通过还是失败。

在unittest 的库中提供了大量的实用方法来检查预期值与实际值, 来验证case的结果。 一般来说, 检查条件大体分为等价性, 逻辑比较以及其他。

如果给定的断言通过, 测试会继续执行到下一行的代码, 如果断言失败, 对应的case测试会立即停止或者生成错误信息( 一般打印错误信息即可) ,但是不要影响其他的case执行。

unittest 的单元测试库提供了标准的xUnit 断言方法。下面是一些常用的断言

序号断言方法断言描述
1assertEqual(a, b, msg=None)验证a=b
2assertNotEqual(a, b, msg=None)验证a != b, 相等
3assertTrue(expr, msg=None)验证expr是true
4assertFalse(expr,msg=None)验证expr是false
5assertIs(a, b, msg=None)验证a、b是同一个对象
6assertIsNot(a, b, msg=None)验证a、b不是同一个对象
7assertIsNone(expr, msg=None)验证expr是None
8assertIsNotNone(expr, msg=None)验证expr不是None
9assertIn(a, b, msg=None)验证a是b的子串
10assertNotIn(a, b, msg=None)验证a不是b的子串
11assertIsInstance(obj, cls, msg=None)验证obj是cls的实例
12assertNotIsInstance(obj, cls, msg=None)验证obj不是cls的实例

测试类

使用setUp()方法,python将优先运行setUp()方法",再运行各个test开头的方法。
可以在setUp()方法中创建一系列实例并设置他们的顺序,再在测试方法中直接使用这些实例。

import unittest
from survey import answer

class TestAnswer(unittest.TestCase):
    
    """测试answer类"""
    def setUp(self):
        """python将优先运行setUp()方法",再运行各个test开头的方法"""
       
        question = "what language did you first learn to speak?"
        self.my_survey = answer(question)
        self.responses = ['English', 'spanish', 'free']

    def test_store_three_response(self):
        
        """"测试三个答案会被保存"""
        # 保存
        for response in self.responses:
            self.my_survey.answer_append(response)
        
        for response in self.responses:
            self.assertIn(response, self.my_survey.responses)

注:运行测试用例时,每完成一个单元测试,python都打印一个字符。通过打印一个句点,错误打印一个E,测试导致断言失败时打印一个F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值