Я пишу внутреннюю структуру модульных тестов, которая включает в себя имитацию нескольких функций/классов.
@patch, похоже, отлично подходит для моих нужд, но поскольку есть много тестов, которые потребуют исправления многих разных классов/функций, я Я хочу избежать написания нескольких @patch перед каждым тестом и, возможно, инкапсулировать их все в другой декоратор. Чтобы лучше проиллюстрировать мои потребности:
Текущее состояние:
@patch('p.A', mockedA)
@patch('p.B', mockedB)
.
.
@patch('p.N', mockedN)
def test_this()
желаемое состояние:
@patch_all
def test_this()
Возможно ли реализовать что-то подобное? Пока мне это не удалось, так как @patch требует, чтобы следовал либо def, либо другой @.
EDIT 2:
Я попробовал предложение Микеле, но тест больше не определяется как тест:
После добавления functools.wraps в декоратор patch_all все заработало.
def patch_all(f):
@patch('p.A', moduleA.classA.methodA)
@patch('p.B', moduleB.classB.methodB)
.
.
@patch('p.N', moduleN.classN.methodN)
wraps(f)
def functor(*args, **kwargs):
return f(*args, **kwargs)
return functor
class TestWrapper(unittest.TestCase):
@patch_all
def my_test(self):
my test goes here...
С помощью декоратора @patch_all я получаю следующее:
nosetests Tester.py --nocapture
----------------------------------------------------------------------
Ran 0 tests in 0.000s
OK
Если я удалю это:
$ nosetests Tester.py --nocapture
.
----------------------------------------------------------------------
Ran 1 test in 7.692s
OK
Заранее спасибо.
test_
, иначе бегун его не распознает. - person Michele d'Amico   schedule 28.12.2014@wrap
, чтобы исправить это. Но я не могу попробовать это сейчас, я использую телефон. Я могу попробовать это позже в течение дня. - person Michele d'Amico   schedule 28.12.2014