Python接口自动化之mock模块基本使用(3)

def test_success(self):
        pay = PayApi()
        pay.auth = mock.Mock(return_value={'status_code':'200'})
        status = pay.pay('1000', '12345', '10000')
        self.assertEqual(status, '支付成功')

def test_fail(self):
        pay = PayApi()
        pay.auth = mock.Mock(return_value={'status_code':'500'})
        status = pay.pay('1000', '12345', '10000')
        self.assertEqual(status, '支付失败')

def test_error(self):
        pay = PayApi()
        pay.auth = mock.Mock(return_value={'status_code':'300'})
        status = pay.pay('1000', '12345', '10000')
        self.assertEqual(status, '未知错误')

def test_exception(self):
        pay = PayApi()
        pay.auth = mock.Mock(return_value='200')
        status = pay.pay('1000', '12345', '10000')
        self.assertEqual(status, 'Error, 服务器异常!')


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

测试输出结果

....用户1000支付失败, 金额不变
用户1000支付金额10000成功

----------------------------------------------------------------------
Ran 4 tests in 0.001s

OK

Process finished with exit code 0

从执行结果可以看出,即使第三方支付接口无法使用,但是我们自己的支付接口仍然测试通过了

也许有人会问,第三方支付都不能用,我们的测试结果是否是有效的呢?

通常我们在测试一个模块的时候,我们是可以认为其他模块的功能是正常的,只针对目标模块进行测试是没有任何问题的,所以说测试结果也是正确的

其实上述代码还可以使用另一种方式来写

mock对象的方法

"""
------------------------------------
@Time : 2019/6/26 15:22
@Auth : linux超
@File : testpay.py
@IDE  : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
@QQ  : 28174043@qq.com
@GROUP: 878565760
------------------------------------
"""
import unittest
from unittest import mock
from unittest.mock import patch

from payment.PayMent import PayApi


class TestPayApi(unittest.TestCase):

def setUp(self):
        self.pay = PayApi()

@patch.object(PayApi, 'auth')
    def test_success(self, mock_auth):

mock_auth.return_value = {'status_code':'200'}
        status = self.pay.pay('1000', '12345', '10000')
        self.assertEqual(status, '支付成功')

@patch.object(PayApi, 'auth')
    def test_fail(self, mock_auth):
        mock_auth.return_value={'status_code':'500'}
        status = self.pay.pay('1000', '12345', '10000')
        self.assertEqual(status, '支付失败')

@patch.object(PayApi, 'auth')
    def test_error(self, mock_auth):
        mock_auth.return_value={'status_code':'300'}
        status = self.pay.pay('1000', '12345', '10000')
        self.assertEqual(status, '未知错误')

@patch.object(PayApi, 'auth')
    def test_exception(self, mock_auth):
        mock_auth.return_value='200'
        status = self.pay.pay('1000', '12345', '10000')
        self.assertEqual(status, 'Error, 服务器异常!')


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

还有mock一个普通函数,mock多个方法等,这里先不赘述,写法和上面实例差不多

最后

mock还有很多自带的功能方法

且mock功能很强大,也不是一句两句话就能说完了,本篇文章主要介绍了mock的基本使用方法,甚是简单,对于实际中如何应用,如何掌握更强大的方法还需自己慢慢摸索

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6170e5aa1528dd542305aabf129ca02f.html