欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-10 17:05:33
...

单元测试的基本单位就是测试用例,也就是所谓的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()

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

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()

执行结果如下

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

 

从以上的包含有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())

 

 

超全面的测试IT技术课程,0元立即加入学习!有需要的朋友戳:

腾讯课堂测试技术学习地址

相关标签: unittest