山之阿

导航

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)

posted on 2019-01-13 01:04  山之阿  阅读(178)  评论(0编辑  收藏  举报