Написание модульных тестов в Python: как мне начать?

Я закончил свой первый правильный проект в Python, и теперь моя задача - написать для него тесты.

Поскольку это первый раз, когда я сделал проект, это первый раз, когда я буду писать тесты для него.

Вопрос в том, как мне начать? Я понятия не имею. Может ли кто-нибудь указать мне на какую-то документацию/учебник/ссылку/книгу, которую я могу использовать, чтобы начать с написания тестов (и, я думаю, в частности, тестирование модулей)

Любые советы будут приветствоваться по этой теме.

Ответ 2

Если вы новичок в использовании unittests, самый простой подход к обучению часто является лучшим. Исходя из этого, я рекомендую использовать py.test а не модуль unittest по умолчанию.

Рассмотрим эти два примера, которые делают то же самое:

Пример 1 (unittest):

import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __name__ == "__main__":
    main()

Пример 2 (pytest):

def test_starting_out():
    assert 1 == 1

Предполагая, что оба файла называются test_unittesting.py, как мы запускаем тесты?

Пример 1 (unittest):

cd /path/to/dir/
python test_unittesting.py

Пример 2 (pytest):

cd /path/to/dir/
py.test

Ответ 3

В бесплатной книге по Python Dive Into Python есть глава, посвященная модульному тестированию, которая может оказаться вам полезной.

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

Немного поздно, но теперь вы знаете, в следующий раз. :)

Ответ 4

Есть, на мой взгляд, три отличные рамки тестирования python, которые можно проверить.
unittest - модуль поставляется со стандартными дистрибутивами python
nose - может запускать unittest тесты и имеет меньше шаблонов.
pytest - также запускает unittest тесты, имеет меньшее количество шаблонов, лучшую отчетность, массу замечательных дополнительных функций

Чтобы получить хорошее сравнение всех из них, прочитайте введение каждой из них в http://pythontesting.net/start-here.
Там также расширены статьи о светильниках и многое другое.

Ответ 5

Документы для unittest будут хорошим началом.

Кроме того, сейчас немного поздно, но в будущем, пожалуйста, подумайте о написании модульных тестов до или во время самого проекта. Таким образом, вы можете использовать их для тестирования, когда вы идете вперед, и (теоретически) вы можете использовать их в качестве регрессионных тестов, чтобы убедиться, что ваши изменения кода не нарушили существующий код. Это даст вам полное преимущество написания тестовых случаев:)

Ответ 6

unittest поставляется со стандартной библиотекой, но я бы рекомендовал вам nosetests.

"нос расширяется, чтобы облегчить тестирование".

Я также рекомендую вам pylint

"анализирует исходный код Python, который ищет ошибки и признаки низкого качества.

Ответ 7

Как уже отвечали другие, уже поздно писать юнит-тесты, но не слишком поздно. Вопрос в том, тестируем ли ваш код или нет. Действительно, тестировать существующий код нелегко, даже есть книга об этом: Эффективная работа с устаревшим кодом (см. Ключевые моменты или предшественник PDF).

Теперь написание юнит-тестов или нет - это ваш звонок. Вам просто нужно знать, что это может быть утомительным занятием. Вы можете заняться этим, чтобы освоить модульное тестирование или сначала рассмотреть вопрос о приемочных (сквозных) тестах, а также начать писать модульные тесты, когда вы измените код или добавите новую функцию в проект.

Ответ 8

nosetests - блестящее решение для модульного тестирования в python. Он поддерживает как тестовые тесты на основе unittest, так и доктрины, и позволяет вам начать с простого простого файла конфигурации.