Юнит-логика Python - PullRequest
       26

Юнит-логика Python

3 голосов
/ 16 сентября 2008

Может кто-нибудь объяснить мне этот результат. Первый тест завершается успешно, а второй - неудачно, хотя проверяемая переменная изменяется в первом тесте.

>>> class MyTest(unittest.TestCase):
    def setUp(self):
        self.i = 1
    def testA(self):
        self.i = 3
        self.assertEqual(self.i, 3)
    def testB(self):
        self.assertEqual(self.i, 3)


>>> unittest.main()
.F
======================================================================
FAIL: testB (__main__.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "<pyshell#61>", line 8, in testB
AssertionError: 1 != 3

----------------------------------------------------------------------
Ran 2 tests in 0.016s

Ответы [ 5 ]

11 голосов
/ 16 сентября 2008

С http://docs.python.org/lib/minimal-example.html:

Когда метод setUp () определен, тестовый бегун будет запускать этот метод до к каждому тесту.

Итак, setUp () запускается перед testA и testB, каждый раз устанавливая i в 1. За кулисами весь тестовый объект фактически повторно создается для каждого теста, при этом setUp () запускается при каждом новом создании до выполнения теста.

9 голосов
/ 16 сентября 2008

Каждый тест выполняется с использованием нового экземпляра класса MyTest. Это означает, что если вы измените self в одном тесте, изменения не будут перенесены на другие тесты, поскольку self будет ссылаться на другой экземпляр.

Кроме того, как уже отмечали другие, setUp вызывается перед каждым тестом.

0 голосов
/ 19 октября 2008

С методологической точки зрения отдельные тесты должны быть независимыми, в противном случае они могут привести к более трудным для обнаружения ошибкам. Например, представьте, что testA и testB будут вызываться в другом порядке.

0 голосов
/ 16 сентября 2008

Метод setUp, как говорили все остальные, запускается перед каждым написанным вами тестовым методом. Таким образом, при запуске testB значение i равно 1, а не 3.

Вы также можете использовать метод tearDown, который запускается после каждого метода тестирования. Однако, если один из ваших тестов завершится сбоем, ваш метод tearDown никогда не запустится.

0 голосов
/ 16 сентября 2008

Если я правильно помню в этой тестовой среде, метод setUp запускается перед каждым тестом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...