TestCaseTest
def testResult(self):
test = WasRun("testMethod")
result = test.run()
assert("1 run, 0 failed" == result.summary())
Начнем с под д ельной реализации:
TestResult
class TestResult:
def summary(self):
return "1 run, 0 failed"
Теперь сд елаем так, чтобы в результате выполнения метод а
TestCase.run() возвращался объект класса TestResult:
TestCase
def run(self):
self.setUp()
method = getattr(self, self.name)
method()
self.tearDown()
return TestResult()
Теперь, когд а все тесты выполнились успешно, можно сд елать
реализацию метод а summary() реальной. Как и раньше, буд ем д вигаться
маленькими шажками. Для начала заменим количество выполненных
тестов константой:
TestResult
def __init__(self):
self.runCount = 1
def summary(self):
return "%d run, 0 failed" % self.runCount
(Оператор % в языке Python является аналогом функции sprintf в
языке C.) Од нако runCount не может быть константой, это д олжна быть
переменная, значение которой вычисляется исход я из количества
выполненных тестов. Мы можем инициализировать эту переменную
значением 0, а затем увеличивать ее на ед иницу при выполнении
очеред ного теста.
TestResult
def __init__(self):
self.runCount = 0
def testStarted(self):
self.runCount = self.runCount + 1
def summary(self):
return "%d run, 0 failed" % self.runCount
Теперь мы д олжны позаботиться о вызове этого нового метод а:
TestCase
def run(self):
result = TestResult()
result.testStarted()
self.setUp()
method = getattr(self, self.name)
method()
self.tearDown()
return result
Мы точно так же могли бы преобразовать константу «0»,
обозначающую количество тестов, потерпевших неуд ачу, в переменную,
как сд елали это с переменной runCount, од нако существующие тесты
этого не требуют. Поэтому напишем новый тест:
TestCaseTest
def testFailedResult(self):
test = WasRun("testBrokenMethod")
result = test.run()
assert("1 run, 1 failed", result.summary)
Зд есь:
WasRun
def testBrokenMethod(self):
raise Exception
Вызов тестового метод а
Вызов метод а setUp перед обращением к метод у
Вызов метод а tearDown по сле обращения к метод у
Метод tearDown д олжен вызываться д аже в случае неуд ачи теста
Выполнение нескольких тестов
Отчет о результатах
Строка журнала в классе WasRun
Отчет о неуд ачных тестах
Мы немед ленно замечаем, что исключение, генерируемое в метод е
WasRun.testBrokenMethod(), не перехватывается. Нам хотело сь бы
перехватить это исключение и в отчете о результатах тестирования
отметить, что тест потерпел неуд ачу. Добавим соответствующий пункт
в список зад ач.
Под вед ем итог. Мы
• разработали под д ельную реализацию и начали поэтапно д елать ее
реальной путем замены констант переменными;
• написали еще од ин тест;
• когд а тест потерпел неуд ачу, написали еще од ин тест меньшего
масштаба, чтобы обеспечить выполнение неуд ачного теста.
Do'stlaringiz bilan baham: |