Найти - Пользователи
Полная версия: Юнит тест
Начало » Python для новичков » Юнит тест
1
the_author
Здравствуйте

Есть некая функция foo, на вход которой идет строка s, эта функция сверяет её с шаблоном и выдаёт True (совпадает с шаблоном) или False (не совпадает с шаблоном).

Каким образом лучше протестировать работу этой функции?

Будет ли удовлетворительным, если составить юнит тест типа:

import unittest
import foo
class TestFoo(unittest.TestCase):
    right_examples = (...,
                               ...,
                               ...)
    wrong_examples = (...,
                                 ...,
                                 ...)
    def test_right(self):
        '''foo should give True result with right input'''
        for s in self.right_examples:
            result = foo.foo(s)
            self.assertEqual(True, result)
    def test_wrong(self):
        '''foo should give False result with wrong input'''
        for s in self.wrong_examples:
            result = foo.foo(s)
            self.assertEqual(False, result)
if __name__ == '__main__':
    unittest.main()
doza_and
:) Обычно еще тестируют подачей не строки. Тест должен по возможности покрывать все возможные варианты. Правильно вы тестируете или нет можно понять только если вы шаблон приведете и контрольные строки.
the_author
doza_and
Обычно еще тестируют подачей не строки.
То есть для полного тестирования желательно добавить подобный метод? :
    def test_not_a_string(self):
        '''foo should fail with not a string input'''
        self.assertRaises(foo.TypeError , foo.foo, 57)
И если я добавлю этот метод, то тест будет выдавать error в заключении. Это как бы ожидаемая ошибка. Нужно ли try-except добавлять в функцию foo? Или как сделать, чтобы юнит тест прошел на “ОК” в этом случае?

doza_and
Тест должен по возможности покрывать все возможные варианты. Правильно вы тестируете или нет можно понять только если вы шаблон приведете и контрольные строки.
Тестируется название электронной почты на удовлетворение неким правилам. Соответственно в right_examples лежат названия эл. почты, удовлетворяющие правилам, а в wrong_examples - вручную набранные неверные названия (на каждое правило по примеру).
py.user.next
the_author
Каким образом лучше протестировать работу этой функции?
во-первых, подумай, как бы ты проверял её вручную, что бы ты проверял, на каких моментах она может сломаться
потом делаешь один тест, который это всё проверяет
когда он сделан, начинаешь его разносить по разным тестам
тесты нужно называть информативно

the_author
self.assertEqual(True, result)
используй специальные assert'ы (self.assertTrue)

dip3. unittests
dip3. unittests. refactoring
Budulianin
the_author
Каким образом лучше протестировать работу этой функции?

Проанализировать требования, предъявляемые к функциональности и используя классы эквивалентности, составить набор данных, для тестов.

Чтобы понимать, как работает логика тестировщика, попробуй протестировать карандаш или стул. После этого, у тебя не будут возникать подобные вопросы.
Budulianin
the_author
Тестируется название электронной почты на удовлетворение неким правилам.

Это классическая задача, есть куча примеров её решения.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB