1

我一直在互联网上搜索在 python 模块上使用 flexmock 的示例,但所有文档似乎都是针对对象/类的。我想知道是否可以模拟模块返回的一些变量。如果该模块调用另一个模块怎么办?

前任。

def function_inside_function(id, some_string):
    test_log = {"id": id, "definition": some_string}
    return test_log

def function1(id):
    some_string = 'blah' + id  # i am totally bs-ing here
    log = function_inside_function(id, some_string)
    return log

所以现在我想通过使用 flexmock 来模拟一些值来分别测试每个函数

那时当对一个对象做同样的事情时,我可以做(比如对象被分配为test_object

flexmock(test_object).should_receive('some_func').and_return('some_value')

some_func该对象内被调用的位置

但是当我尝试对模块做同样的事情时,我不断得到

FlexmockError: <function function1 at some_address> does not have attribute function_inside_function

我想知道是否可以在模块上使用 flexmock,如果可以。如何?

4

1 回答 1

0

经过大量研究和尝试 n 错误,事实证明我必须使用 sys.modules

说我的模块是从 导入的path.to.module,那么语法是

flexmock(sys.modules['path.to.module']).should_receive('function.of.object').and_return(response)

function.of.object是被调用的函数。例如,requests.get。仅使用get将不起作用。

response 是您尝试模拟的响应。在requests.get示例中,响应将是 a requests.Response(),然后setattr如果 flexmock 抱怨它,您可以使用它来设置属性。(有没有更好的方法呢?)

于 2017-08-11T00:18:28.653 回答