from unittest.mock import patch
def get_title():
return 'title'
def get_msg():
return 'msg'
def do_log(title, msg):
sys.stderr.write(get_title(),
get_msg())
return
def myfunction():
title = get_title()
msg = get_msg()
do_log(title, msg)
def my_new_do_log(*args, **kwargs):
'''
we know, args = title, msg
But I want add EXTRA arguments,
like handler (from caller / from controller)
'''
sys.stderr.write(get_title(),
get_msg(),
handler.get_author_from_handler()
)
# Note: handler is argument from controller!
@patch('do_log')
def controller(handler, mock_do_log):
mock_do_log.side_effect = my_new_do_log
myfunction()
if __name__ == '__main__':
controller(handler)
Run Code Online (Sandbox Code Playgroud)
那么如何将“处理程序”(一个额外的参数)传递给 my_new_do_log 呢?
如果我尝试类似的事情: …
我想将像“abcd”这样的点符号字符串转换为对象。如果对象不存在,我想创建一个空的。
var str = 'a.b.c.d'
var obj = {}
// so ...
function dotToObj(obj, str) {
// something
obj[?] = obj[?] || {}
}
// If object doesnt exist so create a empty object.
var rsp = dotToObj(obj, str);
console.log(rsp)
// Excpect:
Object {a: Object}
a: Object
b: Object
c: Object
d: Object
__proto__: Object
__proto__: Object
__proto__: Object
__proto__: Object
Run Code Online (Sandbox Code Playgroud)