模拟补丁不适用于 nosetests
mock patch not work with nosetests
我只是想通过 运行 一些简单的例子来学习 mock and nosetests,但没有成功:
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
删除 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()
我只是想通过 运行 一些简单的例子来学习 mock and nosetests,但没有成功:
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
删除 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()