python第一单元笔记_python学习笔记- 单元测试,UnitTest

所谓的单元测试,就是对一个模块,一个函数,或则是一个类进行正确性检测的一类测试工作。

以测试驱动的开发方式叫做测试驱动开发(Test Drived Development). 这种开发模式不仅仅是测试,而是分解需求,保证代码质量的一种手段。

单元测试不仅仅在测试的时候保障函数、模块或者类的功能符合我们的需求。同时,也有利于我们在未来修改类或者函数的时候,只需要再跑一遍单元测试就可以确保我们的修改对功能不会产生影响。

当然,单元测试也会让代码量大大增加。

编写单元测试代码需要引入Python的unittest包。

我们可以新建一个单元测试类,但是这个类需要继承unitest.TestCase类。

测试类中的测试方法必须是test开头的,否则不会被执行。

那么这样我们就可以使用unitest.TestCase中的方法了。

常用的方法有:

assertEqual(self, first, second) # 判断是否是预期值

assertTrue(bool) # 判断是否为真

assertRaises(exception) #判断是非抛出特定异常。

我们来举一个例子:

我们先定义一个类自定义类,然后对它进行单元测试。

Dict.py

class Dict(dict):

def __init__(self, **kwargs):

super(Dict, self).__init__(**kwargs)

def __getattr__(self, item):

try:

return self[item]

except KeyError:

raise AttributeError

def __setattr__(self, key, value):

self[key] = value

import unittest

from Dict import Dict

class DictTest(unittest.TestCase):

def test_init(self):

d = Dict(a=100, b=200)

self.assertEqual(d.a, 100)

self.assertEqual(d.b, 200)

self.assertTrue(isinstance(d, dict))

def test_key(self):

d = Dict()

d['key'] = "300"

self.assertEqual(d["key"], "300")

def test_attar(self):

d = Dict()

d.attar = "attar"

self.assertTrue("attar" in d)

self.assertEqual(d.attar, "attar")

def test_keyError(self):

d = Dict()

with self.assertRaises(KeyError):

value = d["NotExisted"]

def test_attarError(self):

d = Dict()

with self.assertRaises(AttributeError):

value = d.not_existed

if __name__ == '__main__':

unittest.main()

因为我们定义了一个dict的子类,所以我们要对它的key、value进行测试;同时它是一个类,所以我们也需要对它的attribute进行测试。

我们定义的unittest.TestCase子类,需要写上两句:

if __name__ == '__main__':

unittest.main()

我们才能像普通python文件一样执行它。

另外,我们也可以用以下方式执行多个test

python -m unittest DictTest

setUp 和 tearDown函数。

setUp和tearDown函数是两个特殊的函数。

setUp再所有单元测试开始前运行; tearDown函数在所有单元测试运行后运行。

这两个函数的应用场景主要有:

例如在需要连接数据库的情况下,可以在setUp函数中开始连接,在tearDown函数中关闭连接。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值