单元测试

单元测试:

单元测试,是指对软件中的最小可测试单元进行检查和验证,是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

单元测试是用来对一个模块,一个函数或者一个类来进行正确性检验的测试工作。

编写单元测试时,我们需要编写一个测试类,从unittest.TestCase继承。
以test开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行。

对每一类测试都需要编写一个test_xxx()方法。由于unittest.TestCase提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们所期望的。最常用的断言就是assertEquals():

单元测试的意义:

1.减少bug
2.提高代码质量
3.快速定位bug、减少调试时间
4.放心重构

TDD是测试驱动开发(Test-Driven Development)的英文简称,是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程

TDD好处:通过测试的执行代码,肯定满足需求,而且有助于接口编程,降低代码耦合,也极大降低bug出现几率(如果是极限编程,几乎是不可能有bug)。坏处:1.投入开发资源(时间和精力);2.由于测试用例在未进行代码设计前写;很有可能限制开发者对代码整体设计;3.可能引起开发人员不满情绪

**setUp与testDown:

可以在单元测试中编写两个特殊的setUp()和tearDown()方法。这两个方法会分别在每调用一个测试方法的前后分别被执行。
setUp()和tearDown()方法有什么用呢?设想你的测试需要启动一个数据库,这时,就可以在setUp()方法中连接数据库,在tearDown()方法中关闭数据库,这样,不必在每个测试方法中重复相同的代码:
可以再次运行测试看看每个测试方法调用前后是否会打印出setup…和tearDown…
**

总结:

单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。
单元测试的测试用例要覆盖常用的输入组合、边界条件和异常。
单元测试代码要非常简单,如果测试代码太复杂,那么测试代码本身就可能有bug。
单元测试通过了并不意味着程序就没有bug了,但是不通过程序肯定有bug。

示例:

在pycharm里面创建一个Test Python项目
分别创建 MathOp.pyMathOpTest.pyTestSuit.py 三个.py文件

MathOp.py

import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)


def add(a, b):
    logging.info('test')
    return a+b


def mul(a, b):
    logging.info('Test')
    return a*b


if __name__ == '__main__':
    add(1, 2)
    mul(1, 2)


TestSuit.py

import unittest
from MathOpTest import TestMathOp


if __name__ == '__main__':
    suite = unittest.TestSuite()
    tests = [TestMathOp('test_add'), TestMathOp('test_mul')]
    suite.addTests(tests)
    runner = unittest.TextTestRunner(verbosity=2)

    with open('UnittestTextReport.txt', 'a') as f:
        runner = unittest.TextTestRunner(stream=f, verbosity=2)
        runner.run(suite)



MathOpTest.py

import unittest
from MathOp import *


class TestMathOp(unittest.TestCase):
    def setUp(self):
        print('进行测试设置')

    def tearDown(self):
        print('进行测试清理')

    def test_add(self):
        self.assertEqual(3, add(1, 2))

    def test_mul(self):
        self.assertEqual(10, mul(2, 5))


if __name__ == '__main__':
    print(1)


运行TestSuit.py文件,可以右键直接运行,也可以点击逐级运行。如图:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值