Python测试框架unittest之mock系列(二)- 断言方法、统计方法

1、断言方法

1、mock常用断言方法:

assert_not_called:模拟从未被调用过。
assert_called:至少调用了一次模拟。
assert_called_once:仅调用了一次模拟。
assert_called_with:使用指定的参数调用模拟。
assert_called_once_with:模拟完全被调用了一次,并且该调用使用了指定的参数。
assert_any_call:已使用指定的参数调用了模拟。

 

2、创建Demo.py文件(创建被测试类:People类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
被测试类
"""
# People类里有两个成员方法(一个有参数,一个无参数)、一个静态方法
class People:

    def __init__(self):
        self.__age = 20

    def name(self,firstName,lastName):
        return firstName + ' ' + lastName

    def age(self):
        return self.__age

    @staticmethod
    def class_name():
        return People.__name__

 

1.1、assert_not_called

assert_not_called:模拟从未被调用过。

1、创建MockTest_assert.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
断言方法(检验是否调用)
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        # 调用被测试类People()
        p = People()
        p.name = mock.Mock(return_value='Hello Mock')
        p.name.assert_not_called()
      
if __name__ == '__main__':
    unittest.main(verbosity=2)

 

2、执行MockTest_assert.py文件,运行结果:

没有调用p.name(),执行成功。

图片

 

1.2、assert_called

assert_called:至少调用了一次模拟。

1、创建MockTest_assert.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
断言方法(检验是否调用)
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        # 调用被测试类People()
        p = People()
        p.name = mock.Mock(return_value='Hello Mock')
        p.name('a', 'b')
        p.name('1', '2')
        p.name.assert_called() 

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

 

2、执行MockTest_assert.py文件,运行结果:

调用2次p.name(),执行成功。

图片

 

1.3、assert_called_once

assert_called_once:仅调用了一次模拟。

1、创建MockTest_assert.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
断言方法(检验是否调用)
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        # 调用被测试类People()
        p = People()
        p.name = mock.Mock(return_value='Hello Mock')
        p.name('a', 'b')
        p.name.assert_called_once() 
             
if __name__ == '__main__':
    unittest.main(verbosity=2)

 

2、执行MockTest_assert.py文件,运行结果:

调用1次p.name(),执行成功。

图片

 

1.4、assert_called_with

assert_called_with:使用指定的参数调用模拟。

1、创建MockTest_assert.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
断言方法(检验是否调用)
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        # 调用被测试类People()
        p = People()
        p.name = mock.Mock(return_value='Hello Mock')
        p.name('a', 'b')
        p.name('a', 'b')
        p.name.assert_called_with('a', 'b')
             
if __name__ == '__main__':
    unittest.main(verbosity=2)

      

2、执行MockTest_assert.py文件,运行结果:

调用2次p.name()且使用指定的参数调用,执行成功。

图片

 

1.5、assert_called_once_with

assert_called_once_with:模拟完全被调用了一次,并且该调用使用了指定的参数。

1、创建MockTest_assert.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
断言方法(检验是否调用)
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        # 调用被测试类People()
        p = People()
        p.name = mock.Mock(return_value='Hello Mock')
        p.name('a', 'b')
        p.name.assert_called_once_with('a', 'b')

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

 

2、执行MockTest_assert.py文件,运行结果:

调用1次p.name()且使用指定的参数调用,执行成功。

图片

 

1.6、assert_any_call

assert_any_call:已使用指定的参数调用了模拟。

1、创建MockTest_assert.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
断言方法(检验是否调用)
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        # 调用被测试类People()
        p = People()
        p.name = mock.Mock(return_value='Hello Mock')
        p.name('a', 'b')
        p.name('1', '2')
        p.name.assert_any_call('a', 'b')

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

 

2、执行MockTest_assert.py文件,运行结果:

调用2次p.name()且已使用指定的参数调用,执行成功。

图片

 

 

2、统计方法

 

 

1、mock常用统计方法:

called:表示是否调用过。
call_count:返回调用的次数。
call_args:获取调用时的参数。
call_args_list:获取调用的所有参数,结果是一个列表。
method_calls:测试对象对mock方法的调用,结果是一个列表,每一项显示了方法的名称和它的参数。
mock_calls:测试对象对mock对象所有的调用,结果是一个列表。

 

2、创建Demo.py文件(创建被测试类:People类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
被测试类
"""
# People类里有两个成员方法(一个有参数,一个无参数)、一个静态方法
class People:

    def __init__(self):
        self.__age = 20

    def name(self,firstName,lastName):
        return firstName + ' ' + lastName

    def age(self):
        return self.__age

    @staticmethod
    def class_name():
        return People.__name__

 

2.1、called

called:表示是否调用过。

1、创建MockTest_call.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统计方法
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        p = mock.Mock(spec = People,return_value='Hello Mock')
        p.name('a', 'b')
        print(p.name.called)

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

 

2、执行MockTest_call.py文件,运行结果:

调用p.name()方法,则调用过标记为True。

图片

 

 

2.2、call_count

call_count:返回调用的次数。

1、创建MockTest_call.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统计方法
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        p = mock.Mock(spec = People,return_value='Hello Mock')
        p.name('a', 'b')
        p.name('1', '2')
        print(p.name.call_count)

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

 

2、执行MockTest_call.py文件,运行结果:

调用p.name()方法2次,则调用次数标记为2。

图片

 

2.3、call_args

call_args:获取调用时的参数。

1、创建MockTest_call.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统计方法
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        p = mock.Mock(spec = People,return_value='Hello Mock')
        p.name('a', 'b')
        print(p.name.call_args)

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

 

2、执行MockTest_call.py文件,运行结果:

调用p.name()方法,获取调用时的参数('a', 'b')。

图片

 

2.4、call_args_list

call_args_list:获取调用的所有参数,结果是一个列表。

1、创建MockTest_call.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统计方法
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        p = mock.Mock(spec = People,return_value='Hello Mock')
        p.name('a', 'b')
        p.name('1', '2')
        print(p.name.call_args_list)

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

 

2、执行MockTest_call.py文件,运行结果:

调用p.name()方法2次,获取调用时的所有参数('a', 'b')、('1', '2'),以列表展现。

图片

 

2.5、method_calls

method_calls:测试对象对mock方法的调用,结果是一个列表,每一项显示了方法的名称和它的参数。

1、创建MockTest_call.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统计方法
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        p = mock.Mock(spec = People,return_value='Hello Mock')
        p.name('a', 'b')
        p.name('1', '2')
        p.age()
        p.class_name()
        print(p.method_calls)
             
if __name__ == '__main__':
    unittest.main(verbosity=2)

 

2、执行MockTest_call.py文件,运行结果:

调用p.name()方法2次、p.age()方法1次、p.class_name()方法1次,每一项显示方法的名称和它的参数,以列表展现。

图片

 

2.6、mock_calls

mock_calls:测试对象对mock对象所有的调用,结果是一个列表。

1、创建MockTest_call.py文件(创建PeopleTest测试类)。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
统计方法
"""
from method.Demo import People
from unittest import mock
import unittest

class PeopleTest(unittest.TestCase):

    def test_name(self):
        p = mock.Mock(spec = People,return_value='Hello Mock')
        p.name('a', 'b')
        p.name('1', '2')
        p.age()
        p.class_name()
        print(p.mock_calls)

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

   2、执行MockTest_call.py文件,运行结果:

调用p.name()方法2次、p.age()方法1次、p.class_name()方法1次,每一项显示方法的名称和它的参数,以列表展现。

图片

如果您觉得文章还不错,请 点赞、分享、在看、收藏 一下,因为这将是我持续输出更多优质文章的最强动力!

在这里推荐一个我自己创建的软件测试交流群,QQ:642830685,群中会不定期的分享软件测试资源,测试面试题以及测试行业资讯,大家可以在群中积极交流技术,还有大佬为你答疑解惑。

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值