1

我有一个方法,需要根据参数进行模拟。例如:

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

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

4

0 回答 0