我有一个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函数替换函数等操作也有一个不成功的补丁。我想知道还有什么可能导致这个问题,我发现当测试本身或我们的测试套件的一小部分运行时,补丁正常工作非常好奇。
答案 0 :(得分:0)
看一下已知的gotchas。可能是你试图修补错误的地方......
答案 1 :(得分:0)
我们无法找出确切的解决方案,但解决方法是,由于obj_get
方法中的大多数逻辑都是由另一个函数api_call()
处理的,因此我们模拟了对{{{而不是功能。
因此,问题似乎是一些导入问题,因为api_call
未在任何地方导入。