python中的模拟对象不适用于Jenkins?

时间:2013-05-14 17:43:24

标签: python jenkins mocking nosetests

我有一个方法,需要根据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

知道如何修复它以便能够使用一个命令运行所有测试吗?

0 个答案:

没有答案