模拟补丁不适用于nosetests

时间:2015-03-20 13:10:45

标签: python unit-testing nose

我只是尝试通过运行简单的示例来学习mocknosetests,但没有运气:

john$ nosetests test_mylib.py
E
======================================================================
ERROR: test_mylib.test_mylib_foo
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/wjq/py-virtenv-2.7.5/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/Users/wjq/py-virtenv-2.7.5/lib/python2.7/site-packages/mock.py", line 1201, in patched
    return func(*args, **keywargs)
TypeError: test_mylib_foo() takes exactly 2 arguments (1 given)

但是,如果我直接运行测试,那就没关系:

john$ python test_mylib.py
john$ 

我想我必须错过对两个图书馆的一些重要理解,因为我是他们的新手。真的很感激,如果有人可以指出它们。

以下是我的示例代码。

test_mylib.py

import mock
import mylib

@mock.patch('mylib.incr')
def test_mylib_foo(aa, incr):
    incr.return_value=5
    assert mylib.foo(1) == 6

if __name__ == '__main__':
    test_mylib_foo(123)

mylib.py

from depen import incr
def foo(aa):
    return incr(aa) +1

depen.py

def incr(aa):
    return aa+1

1 个答案:

答案 0 :(得分:0)

删除aa参数,它可以正常工作:

@mock.patch('mylib.incr')
def test_mylib_foo(incr):
    incr.return_value=5
    assert mylib.foo(1) == 6

if __name__ == '__main__':
    test_mylib_foo()

更好的__main__执行会调用nose.runmodule

if __name__ == '__main__':
    import nose
    nose.runmodule()