在 python 个模块上使用 flexmock
Using flexmock on python modules
我一直在互联网上搜索以查找在 python 模块上使用 flexmock 的示例,但所有文档似乎都是针对 object/class 的。我想知道是否可以模拟模块返回的一些变量。如果该模块调用另一个模块怎么办?
例如
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,如果可以的话。怎么样?
经过大量的研究和试错,原来我必须使用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
示例中,响应将是 requests.Response()
,然后如果 flexmock 抱怨它,您可以使用 setattr
来设置属性。 (有更好的方法吗?)
我一直在互联网上搜索以查找在 python 模块上使用 flexmock 的示例,但所有文档似乎都是针对 object/class 的。我想知道是否可以模拟模块返回的一些变量。如果该模块调用另一个模块怎么办?
例如
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,如果可以的话。怎么样?
经过大量的研究和试错,原来我必须使用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
示例中,响应将是 requests.Response()
,然后如果 flexmock 抱怨它,您可以使用 setattr
来设置属性。 (有更好的方法吗?)