TestCaseTest
def setUp(self):
self.result = TestResult()
def testTemplateMethod(self):
test = WasRun("testMethod")
test.run(self.result)
assert("setUp testMethod tearDown " == test.log)
def testResult(self):
test = WasRun("testMethod")
test.run(self.result)
assert("1 run, 0 failed" == self.result.summary())
def testFailedResult(self):
test = WasRun("testBrokenMethod")
test.run(self.result)
assert("1 run, 1 failed" == self.result.summary())
def testFailedResultFormatting(self):
self.result.testStarted()
self.result.testFailed()
assert("1 run, 1 failed" == self.result.summary())
def testSuite(self):
suite = TestSuite()
suite.add(WasRun("testMethod"))
suite.add(WasRun("testBrokenMethod"))
suite.run(self.result)
assert("2 run, 1 failed" == self.result.summary())
Вызов тестового метод а
Вызов метод а setUp перед обращением к метод у
Вызов метод а tearDown по сле обращения к метод у
Метод tearDown д олжен вызываться д аже в случае неуд ачи теста
Выполнение нескольких тестов
Отчет о результатах
Строка журнала в классе WasRun
Отчет о неуд ачных тестах
Перехват и отчет об ошибках setUp
Созд ать объект TestSuite автоматически на о снове класса TestCase
Все эти бесчисленные ссылки self выгляд ят ужасно, од нако без
этого в языке Python никак не обойтись. Если бы этот язык изначально
был объектно-ориентированным, наверное, в этих ссылках не было бы
над обно сти, а ссылки на глобальные переменные требовали бы
квалификации.
Од нако
язык
Python
изначально
является
интерпретируемым языком с д обавленной в него под д ержкой объектов
(над о отметить, что под д ержка объектов в этом языке реализована
великолепно). В результате по умолчанию переменные считаются
глобальными, а явные ссылки на self – необход имыми.
Я о ставляю реализацию о ставшихся пунктов вам в качестве
упражнения. Над еюсь, обретенные навыки работы в стиле TDD помогут
вам.
Чтобы под вести итог, напомню, что в д анной главе мы
• написали тест д ля класса TestSuite;
• написали часть реализации, од нако не д обились успешного
выполнения тестов – это нарушение правил (я уверен, что существует
про стая под д ельная реализация, которая заставила бы тесты работать,
благод аря чему мы могли бы выполнять рефакторинг, имея перед
глазами зеленую поло ску, од нако сейчас я не хочу д умать на эту тему);
• изменили интерфейс метод а run(), благод аря чему набор тестов
можно использовать точно так же, как и отд ельный тест, – в результате
тесты наконец выполнились успешно;
• выполнили рефакторинг имеющихся тестов – переместили общий
код созд ания объекта результатов в метод setUp().
Do'stlaringiz bilan baham: |