自动化七:单元测试框架五

单元测试框架:unittest

assert 系列:在单元测试框架中,都是通过断言来对case进行判断期望结果和实际结果是否相符

assert 系列包含以下方法:

  assertEqual  判断是否相等

  assertNotEqual  判断是否不相等

  assertTrue  判断是否为真

  assertFalse  判断是否为假

  assertIs  判断地址和值是否相等(也就是判断是否是同一个对象)

  assertIsNot  判断地址和值是否不相等

  assertIsNone  判断是否为None

  assertIsNotNone  判断是否不为None

  assertIn  判断是否包含在里面

  assertNotIn  判断是否不包含在里面

  assertIsInstance  判断指定的参数类型是否和期望的类型一致

  assertNotIsInstance  判断指定的参数是否和期望的类型不一致

  assertRaises  判断函数执行的异常是否和期望的类型一致

  assertRaisesRegex  正则异常捕获

# encoding=utf-8
import unittest
import random


# 被测试类
class MyClass(object):
    @classmethod
    def sum(cls, a, b):
        return a + b

    @classmethod
    def div(cls, a, b):
        return a / b

    @classmethod
    def retrun_None(cls):
        return None


# 单元测试类
class MyTest(unittest.TestCase):

    # assertEqual()方法实例
    def test_assertEqual(self):
        # 断言两数之和的结果
        a, b = 1, 2
        sum = 3
        self.assertEqual(a + b, sum, '断言失败,%s + %s != %s' %(a, b, sum))

    # assertNotEqual()方法实例
    def test_assertNotEqual(self):
        # 断言两数之差的结果
        a, b = 5, 2
        res = 1
        self.assertNotEqual(a - b, res, '断言失败,%s - %s != %s' %(a, b, res))

    # assertTrue()方法实例
    def test_assertTrue(self):
        # 断言表达式的为真
        self.assertTrue(1 == 1, "表达式为假")

    # assertFalse()方法实例
    def test_assertFalse(self):
        # 断言表达式为假
        self.assertFalse(3 == 2, "表达式为真")

    # assertIs()方法实例
    def test_assertIs(self):
        # 断言两变量类型属于同一对象

        a = 12
        b = a
        self.assertIs(a, b, "%s与%s不属于同一对象" %(a, b))

    # test_assertIsNot()方法实例
    def test_assertIsNot(self):
        # 断言两变量类型不属于同一对象
        a = 12
        b = "test"
        self.assertIsNot(a, b, "%s与%s属于同一对象" %(a, b))

    # assertIsNone()方法实例
    def test_assertIsNone(self):
        # 断言表达式结果为None
        result = MyClass.retrun_None()
        self.assertIsNone(result, "not is None")

    # assertIsNotNone()方法实例
    def test_assertIsNotNone(self):
        # 断言表达式结果不为None
        result = MyClass.sum(2, 5)
        self.assertIsNotNone(result, "is None")

    # assertIn()方法实例
    def test_assertIn(self):
        # 断言对象A是否包含在对象B中
        strA = "this is a test"
        strB = "is"
        self.assertIn(strB, strA, "%s不包含在%s中" %(strB, strA))

    # assertNotIn()方法实例
    def test_assertNotIn(self):
        # 断言对象A不包含在对象B中
        strA = "this is a test"
        strB = "Selenium"
        self.assertNotIn(strB, strA, "%s包含在%s中" %(strB, strA))

    # assertIsInstance()方法实例
    def test_assertIsInstance(self):
        # 测试对象A的类型是否值指定的类型

        x = MyClass
        y = object
        self.assertIsInstance(x, y, "%s的类型不是%s" %(x, y))

    # assertNotIsInstance()方法实例
    def test_assertNotIsInstance(self):
        # 测试对象A的类型不是指定的类型
        try:
            a = 123
            b = int
            self.assertNotIsInstance(a, b, "%s的类型是%s" %(a, b))
        except AssertionError as e:
            print(e)

    # assertRaises()方法实例
    def test_assertRaises(self):
        # 测试抛出的指定的异常类型
        # assertRaises(exception)
        with self.assertRaises(TypeError) as cm:
            random.sample([1, 2, 3, 4, 5], "j")
            print("===", cm.exception)  # 打印详细的异常信息
        try:
            # assertRaises(exception, callable, *args, **kwds)
            self.assertRaises(ZeroDivisionError, MyClass.div, 3, 0)
        except ZeroDivisionError as e:
            print(e)

    # assertRaisesRegexp()方法实例
    def test_assertRaisesRegexp(self):
        # 测试抛出的指定异常类型,并用正则表达式具体验证
        # assertRaisesRegexp(exception, regexp)
        with self.assertRaisesRegex(ValueError, 'literal') as ar:
            # print(ar.exception)  # 打印详细的异常信息
            int("xyz")
            print("re:", ar.expected_regexp)  # 打印正则表达式
        try:
            self.assertRaisesRegex(ValueError, "invalid literal for.*XYZ'$", int, 'XYZ')
        except AssertionError as e:
            print(e)


if __name__ == '__main__':
    # 执行单元测试
    unittest.main()

执行结果:

 

posted @ 2020-04-17 11:53  海澜时见鲸  阅读(195)  评论(0)    收藏  举报