我一直在网上搜索找到在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,如果是的话。如何?
答案 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抱怨它。 (有更好的方法吗?)