python unittest之断言及示例

# _*_ coding:utf-8 _*_
import unittest
import sys
reload(sys)
sys.setdefaultencoding("utf-8")


class demoTest(unittest.TestCase):
    def test1(self):
        self.assertEqual(4 + 5,9)     
   
    def test2(self):
        self.assertNotEqual(5 * 2,10)   
        
    def test3(self):
        self.assertTrue(4 + 5 == 9,"The result is False")         
           
    def test4(self):
        self.assertTrue(4 + 5 == 10,"assertion fails")          
          
    def test5(self):
        self.assertIn(3,[1,2,3])                
    
    def test6(self):
        self.assertNotIn(3, range(5))
    def test7(self):
        self.assertAlmostEqual(22.0/7,3.14) 


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

python unintest单元测试框架提供了一整套内置的断言方法。

  1. 如果断言失败,则抛出一个AssertionError,并标识该测试为失败状态

  2. 如果异常,则当做错误来处理 注意:以上两种方式的区别

  3. 如果成功,则标识该测试为成功状态

下面我们看下在unittest框架中定义了哪几类断言方法:

  1. 基本的Boolean断言,即:要么True,要么False的验证

  2. 简单比较断言,例如比较a,b两个变量的值

  3. 复杂断言

基本断言方法

基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。

序号 断言方法 断言描述
1 assertEqual(arg1, arg2, msg=None) 验证arg1=arg2,不等则fail
2 assertNotEqual(arg1, arg2, msg=None) 验证arg1 != arg2, 相等则fail
3 assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail
4 assertFalse(expr,msg=None) 验证expr是false,如果为true,则fail
5 assertIs(arg1, arg2, msg=None) 验证arg1、arg2是同一个对象,不是则fail
6 assertIsNot(arg1, arg2, msg=None) 验证arg1、arg2不是同一个对象,是则fail
7 assertIsNone(expr, msg=None) 验证expr是None,不是则fail
8 assertIsNotNone(expr, msg=None) 验证expr不是None,是则fail
9 assertIn(arg1, arg2, msg=None) 验证arg1是arg2的子串,不是则fail
10 assertNotIn(arg1, arg2, msg=None) 验证arg1不是arg2的子串,是则fail
11 assertIsInstance(obj, cls, msg=None) 验证obj是cls的实例,不是则fail
12 assertNotIsInstance(obj, cls, msg=None) 验证obj不是cls的实例,是则fail

看一下上述断言简单的代码示例

# _*_ coding:utf-8 _*_

import unittest
import sys reload(sys) sys.setdefaultencoding("utf-8")

class
demoTest(unittest.TestCase):
   def test1(self):        self.assertEqual(4 + 5,9)    
       def test2(self):        self.assertNotEqual(5 * 2,10)  
            def test3(self):        self.assertTrue(4 + 5 == 9,"The result is False")                        def test4(self):        self.assertTrue(4 + 5 == 10,"assertion fails")                        def test5(self):        self.assertIn(3,[1,2,3])                        def test6(self):        self.assertNotIn(3, range(5))

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

将上述代码保存至demoAssert.py中,运行以下命令

python demoAssert.py

具体结果请看运行结果即可,这里不做一一分解了。

比较断言

unittest框架提供的第二种断言类型就是比较断言。

下面我们看下各种比较断言:

  1. assertAlmostEqual (first, second, places = 7, msg = None, delta = None)

验证first约等于second。 palces: 指定精确到小数点后多少位,默认为7

  1. assertNotAlmostEqual (first, second, places, msg, delta)

验证first不约等于second。 palces: 指定精确到小数点后多少位,默认为7

注: 在上述的两个函数中,如果delta指定了值,则first和second之间的差值必须≤delta

  1. assertGreater (first, second, msg = None)

验证first > second,否则fail

  1. assertGreaterEqual (first, second, msg = None)

验证first ≥ second,否则fail

  1. assertLess (first, second, msg = None)

验证first < second,否则fail

  1. assertLessEqual (first, second, msg = None)

验证first ≤ second,否则fail

  1. assertRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()

  1. assertNotRegexpMatches (text, regexp, msg = None)

验证正则表达式regexp搜索不匹配的文本text。 regexp:通常使用re.search()

下面看一个简单的示例

# _*_ coding:utf-8 _*_
import unittest
import
math
import re
import
sys reload(sys) sys.setdefaultencoding("utf-8")

class
demoTest(unittest.TestCase):
  def test1(self):      self.assertAlmostEqual(22.0/7,3.14)    
    def test2(self):      self.assertNotAlmostEqual(10.0/3,3)      
    def test3(self):      self.assertGreater(math.pi,3)            def test4(self):      self.assertNotRegexpMatches("Tutorials Point (I) Private Limited",    "Point")

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

将上述代码保存至demoAssert2.py中,运行以下命令

python demoAssert2.py

具体结果请看运行结果即可,这里不做一一分解了。

复杂断言

unittest框架提供的第三种断言类型,可以处理元组、列表、字典等更复杂的数据类型。

序号 断言方法 断言描述
1 assertListEqual (list1, list2, msg = None) 验证列表list1、list2相等,不等则fail,同时报错信息返回具体的不同的地方
2 assertTupleEqual (tuple1, tuple2, msg = None) 验证元组tuple1、tuple2相等,不等则fail,同时报错信息返回具体的不同的地方
3 assertSetEqual (set1, set2, msg = None) 验证集合set1、set2相等,不等则fail,同时报错信息返回具体的不同的地方
4 assertDictEqual (expected, actual, msg = None) 验证字典expected、actual相等,不等则fail,同时报错信息返回具体的不同的地方

下面看下具体的示例代码:

# _*_ coding:utf-8 _*_
import unittest
import
sys reload(sys) sys.setdefaultencoding("utf-8")

class
demoTest(unittest.TestCase):
  def test1(self):      self.assertListEqual([2,3,4], [1,2,3,4,5])    
    def test2(self):      self.assertTupleEqual((1*2,2*2,3*2), (2,4,6))  
          def test3(self):      self.assertDictEqual({1:11,2:22},{3:33,2:22,1:11})        if __name__ == '__main__':   unittest.main()

将上述代码保存至demoAssert2.py中,运行以下命令

python demoAssert3.py

具体结果请看运行结果即可,这里不做一一分解了。


unittestPython中常用的单元测试框架,它提供了丰富的断言方法用于判断测试结果是否符合预期。下面是一些unittest断言方法的代码示例: 1. assertEqual() 该方法用于判断两个值是否相等。 ```python import unittest class MyTest(unittest.TestCase): def test_equal(self): self.assertEqual(1+1, 2) # 断言1+1等于2 ``` 2. assertNotEqual() 该方法用于判断两个值是否不相等。 ```python import unittest class MyTest(unittest.TestCase): def test_not_equal(self): self.assertNotEqual(1+1, 3) # 断言1+1不等于3 ``` 3. assertTrue()和assertFalse() 这两个方法分别用于判断表达式是否为True和False。 ```python import unittest class MyTest(unittest.TestCase): def test_true(self): self.assertTrue(2 > 1) # 断言2大于1为True def test_false(self): self.assertFalse(1 > 2) # 断言1大于2为False ``` 4. assertIn()和assertNotIn() 这两个方法用于判断一个值是否在列表或元组中存在或不存在。 ```python import unittest class MyTest(unittest.TestCase): def test_in(self): myList = [1, 2, 3, 4, 5] self.assertIn(3, myList) # 断言3在myList中存在 def test_not_in(self): myTuple = (1, 2, 3, 4, 5) self.assertNotIn(6, myTuple) # 断言6不在myTuple中存在 ``` 5. assertRaises() 该方法用于判断一个特定的异常是否被抛出。 ```python import unittest def divide(x): return 1/x class MyTest(unittest.TestCase): def test_exception(self): self.assertRaises(ZeroDivisionError, divide, 0) # 断言在divide(0)的情况下会抛出ZeroDivisionError异常 ``` 以上是unittest中几个常用的断言方法的代码示例。使用这些断言方法,我们可以方便地对代码进行单元测试,确保其功能的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值