mock demo

mock demo 目录结构

用到的库:

unittest:单测框架

mock:从python3.3以后,mock已经集成到unittest

断言知识点:

断言结果:如果成功返回None,如果失败,返回失败信息

依赖的外部支付接口

__author__ = 'kangpc'
__date__ = '2020-6-29 10:46'


"""
mock demo

"""

def pay_money():
   '''假设这里是一个支付的功能,未开发完
   支付成功返回:{"result": "success", "reason":"null"}
   支付失败返回:{"result": "fail", "reason":"余额不足"}
   reason返回失败原因
   '''
   pass

def pay_status():
   '''根据支付的结果success or fail,判断跳转到对应页面'''
   result = pay_money()
   print("打印mock数据:"+str(result))
   try:
      if result["result"] == "success":
         return "支付成功"
      elif result["result"] == "fail":
         print("失败原因:%s" % result["reason"])
         return "支付失败"
      else:
         return "未知错误异常"
   except:
      return "Error, 服务端返回异常!"

测试类-测试pay文件中mock的支付接口

__author__ = 'kangpc'
__date__ = '2020-6-29 10:47'

import unittest
from unittest import mock
import pay

class Test_pay_statues(unittest.TestCase):
   '''单测用例'''
   def test_01(self):
      print('''执行用例名称:支付成功场景''')
      # mock一个支付成功的数据
      pay.pay_money = mock.Mock(return_value={"result": "success", "reason":"null"})
      # 根据支付结果测试页面跳转
      status = pay.pay_status()
      self.assertEqual(status, "支付成功")


   def test_02(self):
      print('''执行用例名称:支付失败场景''')
      # mock一个支付成功的数据
      pay.pay_money = mock.Mock(return_value={"result": "fail", "reason": "余额不足"})
      # 根据支付结果测试页面跳转
      status = pay.pay_status()
      self.assertEqual(status, "支付失败")

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

运行结果

C:Users54718EnvsMyDjangoScriptspython.exe D:/myproject/mock_demo/test_pay.py
执行用例名称:支付成功场景
打印mock数据:{'result': 'success', 'reason': 'null'}
执行用例名称:支付失败场景
..
打印mock数据:{'result': 'fail', 'reason': '余额不足'}
----------------------------------------------------------------------
失败原因:余额不足
Ran 2 tests in 0.000s

OK

Process finished with exit code 0

更多学习笔记移步 https://www.cnblogs.com/kknote
原文地址:https://www.cnblogs.com/kknote/p/13207174.html