我有一个方法,需要根据参数进行模拟。例如:
mock_obj.method('param1').get()
返回10
mock_obj.method('param2').get()
返回'~/Programs'
等等
我使用 side_effect 做到这一点:
def method_mock(*args, **kwargs):
param_name = args[0]
pref = MagicMock()
pref.get.return_value = {
'param1': 10,
'param2': "~/Programs"
}[param_name]
return pref
mock_obj = MagicMock()
mock_obj.method = MagicMock(side_effect = method_mock)
然后我打电话给模拟:
>>> mock_obj.method('param1').get()
10
>>> mock_obj.method('param2').get()
'~/Programs'
在我的机器上一切正常。但是当我在 CI 服务器(Jenkins)上运行测试(使用nosetests)时,我得到了这个:
>>> mock_obj.method('param1').get()
<MagicMock name='mock_obj.method().get()' id='22379152'>
>>> mock_obj.method('param2').get()
<MagicMock name='mock_obj.method().get()' id='22379152'>
但是,当我从控制台(在 CI 机器上)运行上面的代码时,它工作正常......
编辑:
一整天后,我找到了解决方案。问题在于鼻子测试。当我使用一个命令运行所有测试时,我遇到了上述问题:
nosetests --with-xunit --all-modules
当我分别运行每个测试时......一切正常:
nosetests --with-xunit test_integration1
nosetests --with-xunit test_integration2
nosetests --with-xunit test_integration3
nosetests --with-xunit test_integration4
知道如何修复它以使用一个命令运行所有测试吗?