2015-03-20 3 views
0

Я просто пытался узнать mock и nosetests, выполнив простые примеры, но не получил никакой удачи:издеваться патч не работает с 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 

ответ

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() 
+0

Я знаю, что должна быть ошибка, но не могу себе представить, что это так глупо. Благодарю. –

Смежные вопросы