我需要通过更改名为 process.py 的应用程序模块头部的默认值来对 python 模块进行单元测试。声明的默认值是一个固定的 int。我可以将其更改为使用 os.environ 中的其他内容,但我希望简单地分配全局,但显然我缺少对“def”的一些理解。
process.default_timeout_secs = 2
# --name: process
default_timeout_secs = 120
def call_process(cmd, timeout=default_timeout_secs):
print 'run:', cmd, 'timeout:', timeout
...
# --name: test_process
from nose.tools import *
import process
@ raises(TimeoutExpired)
def test_process_run_modified_default():
process.default_timeout_secs = 5
run(sleep 10)
我从其他帖子中了解到,导入模块时 default_timeout_secs 的 process.call_process.func_defaults 值不是模块顶部的值。如何更改函数中使用的默认值?
process.default_timeout_secs = 5 process.call_process.func_globals['default_timeout'] 5 process.call_process.func_defaults (120)
Out[21]: 5
>>> process.call_process(cmd)
Out[22]: call_process: cmd= sleep 2 timeout= 120 <----- 120?
Executing cmd sleep 2 verbose=True
输出应显示异常 TimoutExpired。