zoukankan      html  css  js  c++  java
  • pytest---mock使用(pytest-mock)

    前言

    上一篇介绍了unittest中的mock,既然unittest中存在mock模块,那么pytest中也存在mock模块,pytest中的mock使用第三方库:pytest-mock

    pytest-mock

    安装:  pip install pytest-mock 

    这里的mock和unittest的mock基本上都是一样的,唯一的区别在于pytest.mock需要导入需要mock对象的详细路径。

    # weateher_r.py
    class Mock_weather():
        def weather(self):
            '''天气接口'''
            pass
        def weather_result(self):
            '''模拟天气接口'''
            result = self.weather()
            if result['result'] == '':
                print('下雪了!!!')
            elif result['result'] == '':
                print('下雨了!!!')
            elif result['result'] == '晴天':
                print('晴天!!!!')
            else:
                print('返回值错误!')
            return result['status']

    先将需要模拟的天气接口,以及需要模拟的场景的代码写好,然后在进行遵循pytest的用例规范进行书写关于mock的测试用例

    # test_01.py
    import pytest
    from test_01.weather_r import Mock_weather
    
    
    def test_01(mocker):
        # 实例化
        p = Mock_weather()
        moke_value = {'result': "", 'status': '下雪了!'}
        # 通过object的方式进行查找需要mock的对象
        p.weather = mocker.patch.object(Mock_weather, "weather", return_value=moke_value)
        result =p.weather_result()
        assert result=='下雪了!'
        
    def test_02(mocker):
        # 实例化
        product = Mock_weather()
        # Mock的返回值
        mock_value = {'result': "", 'status': '下雨了!'}
        # 第一个参数必须是模拟mock对象的完整路径
        product.weather = mocker.patch('test_01.weather_r.Mock_weather.weather',return_value=mock_value)
        result = product.weather_result()
        assert result=='下雨了!'
        
    if __name__ == '__main__':
        pytest.main(['-vs'])

    通过上述代码,安静提供pytest中mock的2中方法:第一种中的第一个参数是通过object的方式进行查找关于Mock_weather的类,然后在找到下面的需要mock的对象方法名称,第2个参数表示mock的值。第二中方法中的第一个参数是通过完整的路径进行找到需要mock的对象,第2个参数是mock的值。通过执行发现,两种方法都是可以mock成功的

     

    上述内容为pytest中的pytest-mock的简单使用,如果有更好的方法可以下方留言一起探讨 

  • 相关阅读:
    【leetcode】1020. Partition Array Into Three Parts With Equal Sum
    【leetcode】572. Subtree of Another Tree
    【leetcode】123. Best Time to Buy and Sell Stock III
    【leetcode】309. Best Time to Buy and Sell Stock with Cooldown
    【leetcode】714. Best Time to Buy and Sell Stock with Transaction Fee
    【leetcode】467. Unique Substrings in Wraparound String
    【leetcode】823. Binary Trees With Factors
    【leetcode】143. Reorder List
    【leetcode】1014. Capacity To Ship Packages Within D Days
    【leetcode】1013. Pairs of Songs With Total Durations Divisible by 60
  • 原文地址:https://www.cnblogs.com/qican/p/14676854.html
Copyright © 2011-2022 走看看