在python模块上使用flexmock

时间:2017-08-09 01:16:46

标签: python flexmock

我一直在网上搜索找到在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,如果是的话。如何?

1 个答案:

答案 0 :(得分: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将无效。

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