zoukankan      html  css  js  c++  java
  • unittest

    1 test case是单元测试中的最小个体

    • 最简单的TestCase子类只需实现一个测试方法(名字以test开头)就可以实现对特定测试代码的执行
    • 如果setUp()方法引发异常,框架会认为该测试遇到了错误,测试方法就不会被执行。
    • 只要setUp()执行成功了,那么不管测试方法是否成功,tearDown()方法都会执行。
    • 各测试方法的执行顺序是根据方法名字符串形式进行排序的。

    2 test suite是test case的合集,通常用test suite将test case汇总然后一起执行。

    3 test runner是一个执行器,它可以执行case并提供结果给用户。它可以提供图形界面、文本界面或者返回一个值表示测试结果

    import unittest
    
    class Test(unittest.TestCase):
       
    @classmethod
    def setUpClass(cls):
    print("当类测试方法被执行前会被调用的一个类方法")
    @classmethod
    def tearDownClass(cls):
    print("当类测试方法被执行前会被调用的一个类方法")
    
    
    def setUp(self):
            print("我是每一个测试方法之前都会运行一次")
        def test1(self):
            print("我是测试方法1")
            #bool(x) is True
            self.assertTrue(True)
        def test2(self):
            print("我是测试方法2")
            # first msg = second msg
            self.assertEqual(1,1)
    
        def test3(self):
            print("我是测试方法3")
            # bool(x) is False
            self.assertFalse(False)
            #x断言抛出指定的异常
            with self.assertRaises(FileNotFoundError):
                open("1111")
        def tearDown(self):
            print("我在每一个测试方法之后都会运行一次")
    if __name__ == '__main__':
        unittest.main(verbosity=2)

    在运行用例的时候可以加入verbosity=2参数, 打印出测试的详细信息, 默认为verbosity=1, 默认为0,不打印任何一条用例的执行结果

    2 测试套件(Test suite)

    import unittest
    
    class TestSuiteS(unittest.TestCase):
    
    
        def test1(self):
            #a!=b
            self.assertNotEqual(2,1)
            print("我是测试方法1")
        def test2(self):
            #a is b
            self.assertIs("a","a")
            print("我是测试方法2")
        def test3(self):
            #a is not b
            self.assertIsNot("a","b")
            print("我是测试方法3")
        def test4(self):
            # x is None
            self.assertIsNone(None)
            print("我是测试方法4")
        def test5(self):
            # x Not is Noe
            self.assertIsNotNone(1)
            print("我是测试方法5")
    
    def suite():
        #返回一个套件
        suite = unittest.TestSuite();
        #添加TestCase到TestSuite中
        suite.addTest(TestSuiteS("test1"))
        suite.addTest(TestSuiteS("test2"))
        suite.addTest(TestSuiteS("test3"))
        suite.addTest(TestSuiteS("test4"))
        suite.addTest(TestSuiteS("test5"))
        return suite
    if __name__ == '__main__':
        #返回一个执行器
        runner = unittest.TextTestRunner()
    #执行器执行套件 runner.run(suite())

     3 跳过测试

    可以跳过单个测试或者跳过整个测试类,可以将一个测试标记为预计失败,但是这个测试结果不会记录在TestResult中记录

     
    import unittest

    class TestSuper():
    pass
    class TestSub(TestSuper):
    pass
    sub = TestSub()
    super = TestSuper()
    #@unittest.skip 跳过类
    class TestSkip(unittest.TestCase):

    @unittest.skip("我被跳过了")
    def test1(self):
    print("我是测试方法1")
    @unittest.skipIf(True, "如果条件为真时跳过测试")
    def test2(self):
    print("我是测试方法2")
    # @unittest.skipUnless(False, "条件不为真时跳过测试")
    def test3(self):
    self.assertNotIsInstance(sub, super)
    print("我是测试方法3")
    # @unittest.expectedFailure#预期失败
    def test4(self):
    self.assertIsInstance("a", str)
    print("我是测试方法4")
    if __name__ == '__main__':
    unittest.main(verbosity=2)
  • 相关阅读:
    类数据源Visual C++对ODBC数据库资源的访问
    变量对话框MFC 关于控件变量的使用
    S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
    设备内存缓冲区和 /proc/iomem
    multiplexed pins
    电脑硬件资源有冲突怎么处理?
    redhat open source university 硬件资源
    深入理解linux系统下proc文件系统内容
    S3C2440上LCD驱动(FrameBuffer)实例开发讲解(一)
    Framebuffer文章收集
  • 原文地址:https://www.cnblogs.com/sailfan/p/10254377.html
Copyright © 2011-2022 走看看