代码之家  ›  专栏  ›  技术社区  ›  M3RS

如何用pytest mock指定mock函数的返回值?

  •  0
  • M3RS  · 技术社区  · 5 年前

    False . 嘲笑不是这样吗?

    我尝试更改函数的路径,但它出错了,因此路径似乎是正确的。我错过了什么?

    import pytest
    
    from deals.services.services import is_user_valid
    
    
    class TestApi:
        def test_api(self, mocker):
            mocker.patch('deals.services.services.is_user_valid', return_value=True)
            print(is_user_valid("sdfds", "sdfsdf"))
    
    1 回复  |  直到 5 年前
        1
  •  3
  •   Masklinn kmdreko    5 年前

    from deals.services.services import is_user_valid
    import deals.services.services
    deals.services.services.is_user_valid = Mock(return_value=True)
    # call local is_user_valid
    

    通过导入“terminal”符号本身,您已经缩短了模拟的可能性,它现在是本地引用,因此更新“remote”引用对本地版本没有影响。意思是你应该控制住 模块

    from deals.services import services
    
    def test_api(mocker):
        mocker.patch('deals.services.services.is_user_valid', return_value=True)
        print(services.is_user_valid("sdfds", "sdfsdf"))
    

    应该 做得更好。

    这也是使用此类导入的任何模块的问题,它们需要修补使用点而不是定义点

    看到了吗 the documentation 更多细节。

        2
  •  1
  •   M3RS    5 年前

    我的实际问题比上面的最小版本更复杂。mock函数在另一个文件中使用。

    帮助的是在导入/使用函数的地方修补函数,而不是在定义函数的地方。 mocker.patch 导入函数的文件的路径。

    推荐文章