模拟补丁没有正确替换功能

时间:2016-07-12 22:02:01

标签: python django unit-testing mocking django-testing

我有一个tastypie REST API资源,比如名为Resource,它在get_token方法中导入并使用libs.utils中名为obj_get的函数。

因此,为了测试这个资源,在我的测试类中,我创建了一个如下所示的测试:

mock_get_token = Mock(return_value="something")

@patch("path.to.resource.get_token", mock_get_token)
def test_get_token(self):
    params = {"args": "args"}
    # following call should call the get_token function in the resource
    response = self.client.get("path/to/resource", params)
    # do things with the response and make sure I get right output

因此,当我自己运行测试时,@ patch正常工作并按预期工作,用mock函数替换该函数。但是,在我们较大的应用程序测试套件中运行测试会导致修补程序失败。

手动尝试用mocked函数替换函数等操作也有一个不成功的补丁。我想知道还有什么可能导致这个问题,我发现当测试本身或我们的测试套件的一小部分运行时,补丁正常工作非常好奇。

2 个答案:

答案 0 :(得分:0)

看一下已知的gotchas。可能是你试图修补错误的地方......

答案 1 :(得分:0)

我们无法找出确切的解决方案,但解决方法是,由于obj_get方法中的大多数逻辑都是由另一个函数api_call()处理的,因此我们模拟了对{{{而不是功能。

因此,问题似乎是一些导入问题,因为api_call未在任何地方导入。