Я пытаюсь понять Python Mock, чтобы лучше тестировать мой код. В прошлом я не проводил много модульного тестирования, но хочу подчеркнуть, что он продвигается вперед. «With mock.patch (« что-то ») как« mock »: синтаксис кажется действительно удобным для насмешек, которые мой код использует. Это было особенно удобно для имитации запросов к базе данных или API.Хороший подход к насмешкам объектов в Python?
Однако, я замечаю, что количество тестов, которые я пишу, растет, так же как и дублирование в моих тестах. Если у меня есть несколько классов, используемых в моем классе (MyClass ниже), которые нужно издеваться, мне нужно высмеять их для нескольких тестов, даже если они не используются непосредственно для конкретного теста. Например:
with context("my test"):
with it('responds true'):
with mock.patch('lib.mymodule.ClassA') as MockClassA:
with mock.patch('lib.mymodule.ClassB') as MockClassB:
with mock.patch('lib.mymodule.ClassC') as MockClassC:
MockClassA.return_value = "bogus result"
f = MyClass("host", "user", "password")
self.assertEqual(f, "bogus result")
В этом случае MockClassA, B, C и может говорить с базой данных или сделать API вызов, который я на самом деле не нужно делать во время тестирования. Но поскольку мой класс использует каждый, мне нужно высмеять их все для всех тестов. Есть лучший способ сделать это?
EDIT: исправлен мой код, чтобы отразить, что я использую Mamba для модульного тестирования. Прошу прощения за то, что не упоминал об этом вначале.
Должно ли это быть 'class TestHostRecordCreation (unittest.TestCase):'? – mgilson
Ваш вопрос кажется похожим на вопрос, заданный по адресу http://stackoverflow.com/q/28223321/748858 ... В этом ответе я покажу, как перемещать патчи в методе setUp, или использовать его как декоратор класса. Посмотрите там и посмотрите, поможет ли вам ваша проблема. – mgilson
Прошу прощения, я печатал это от руки. Я на самом деле использую Mamba, а не unittest. – blindsnowmobile