我有一个方法,需要根据params进行模拟。 e.g:
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
知道如何修复它以便能够使用一个命令运行所有测试吗?