unittest的使用(二)——unittest的基本使用语法

单元测试的基本单位就是测试用例,也就是所谓的test case。case里面包含了执行代码以及结果正确性的校验方案。在unittest中,测试用例通过TestCase类实现。通过编写TestCase的子类实现我们自己的自定义测试用例

自定义测试类中,所有的测试方法需要使用test关键字开头

import unittest
 
 
class TestStringMethods(unittest.TestCase):
    def test_upper(self):
        self.assertEqual('foo'.upper(), 'FOO')
 
    def test_isupper(self):
        self.assertTrue("FOO".isupper())
        self.assertFalse('Foo'.isupper())
 
    def test_split(self):
        s = "hello world"
        self.assertEqual(s.split(), ['hello', 'world'])
        with self.assertRaises(TypeError):
            s.split(2)
 
 
if __name__ == '__main__':
    unittest.main()

setUp()

如果我们需要给多个测试方法使用相同的前置操作,那我们就需要重写TestCase类的setUp()方法,将我们需要的前置操作代码移动到setUp()中。为了演示效果,我们在setUp函数中编写一个输出语句,然后在每一个case中也各自编写一个输入语句。我们可以看到很明显的效果,setUp()函数中的输出语句,在每一个case的输出语句前都出现了

import unittest


class TestStringMethods(unittest.TestCase):
    def setUp(self):
        print("这里是所有test的case会使用的前置操作")
    def test_upper(self):
        print("test_upper")
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        print("test_isupper")
        self.assertTrue("FOO".isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        print('test_split')
        s = "hello world"
        self.assertEqual(s.split(), ['hello', 'world'])
        with self.assertRaises(TypeError):
            s.split(2)


if __name__ == '__main__':
    unittest.main()

case的运行顺序是按照测试名排序的结果决定的,比如我的第一个测试case是test_upper,但是反而确实最后一个执行的,因为是按照case名排序,u的顺序实在i和s的后面,所以test_upper最后执行

tearDown():

和setUp()方法类似的,TestCase提供了另一个方法tearDown()用来处理测试case运行完成之后的清扫工作

位置就是在代码的最后面

import unittest


class TestStringMethods(unittest.TestCase):
    def setUp(self):
        print("这里是所有test的case会使用的前置操作")
    def test_1upper(self):
        print("test_upper")
        self.assertEqual('foo'.upper(), 'FOO')

    def test_isupper(self):
        print("test_isupper")
        self.assertTrue("FOO".isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        print('test_split')
        s = "hello world"
        self.assertEqual(s.split(), ['hello', 'world'])
        with self.assertRaises(TypeError):
            s.split(2)

    def tearDown(self):
        print("这里是test的case的清扫操作")


if __name__ == '__main__':
    unittest.main()

执行结果如下

 

从以上的包含有setUp()和tearDown()方法的函数,我们可以看到,每个case在执行前都会调用一次setUp(),执行完成之后都会调用一次tearDown()

 

配置测试集 testSuite

使用上面代码的话就会有一个问题,每次都会将所有的测试方法都全部执行一遍,如果我们只想执行特定的测试方法的话,那我们就需要组件自己的测试集 testSuit。

测试集的使用需要使用TestSuit类,实例化测试集对象,完成用例的添加。测试集合testsuite的执行需要使用unittest提供的测试运行类来操作

def suite():
    suite = unittest.TestSuite()
    suite.addTest(TestStringMethods("test_split"))
    suite.addTest(TestStringMethods('test_upper'))
    return suite

if __name__ == '__main__':
    runner = unittest.TextTestRunner()
    runner.run(suite())

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值