Модульное тестирование Python: пошаговое понимание тестовой среды, тестовых случаев и анализа покрытия


предисловие

В разработке программного обеспечения модульное тестирование является очень важным звеном. Это гарантирует, что ваш код будет работать правильно и не будет проблем с будущими модификациями. В Python модульное тестирование реализовать очень просто. В этой статье будут представлены все точки знаний по модульному тестированию Python, включая тестовую среду, тестовые примеры, тестовые приспособления, наборы тестов и анализ покрытия.


1. Тестовая среда

Наиболее часто используемая среда тестирования в Python — это unittest. Это среда тестирования, которая поставляется с Python и может использоваться для написания тестовых случаев и запуска тестов. unittest предоставляет серию тестовых приспособлений, которые могут помочь вам в тестировании. Помимо юниттеста, есть и другие фреймворки для тестирования, такие как pytest и Nose.

2. Тестовые случаи

Тестовый пример относится к тестовому коду в модульном тесте, который используется для проверки того, работает ли ваша программа должным образом. Тестовые случаи обычно включают тестовые входные данные и ожидаемые выходные данные. В модульном тесте Python вы можете наследовать класс unittest.TestCase для написания тестовых случаев. Каждый тестовый пример должен быть максимально независимым, чтобы выявить проблему.

3. Тестовое устройство

Тестовые приборы относятся к некоторым вспомогательным функциям, используемым в тестовых примерах. Общие тестовые приспособления включают setUp() и tearDown(). setUp() вызывается перед выполнением каждого тестового примера для инициализации тестовой среды; tearDown() вызывается после выполнения каждого тестового примера для очистки тестовой среды. Во время теста тестовое приспособление может помочь вам с некоторыми операциями предварительной и последующей обработки.

4. Набор тестов

Набор тестов относится к объединению нескольких тестовых случаев вместе для тестирования. В Python вы можете использовать класс unittest.TestSuite для создания наборов тестов. Наборы тестов могут помочь вам выполнять тестовые наборы в определенном порядке и позволяют более удобно управлять тестовыми наборами.

5. Анализ покрытия

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

6. Анализ случая

Предположим, у нас есть функция, которая вычисляет сумму двух чисел:

def add(x, y):
    return x + y

Мы хотим написать модульный тест для проверки правильности этой функции. Во-первых, нам нужно создать класс тестового примера:

import unittest

class TestAdd(unittest.TestCase):
    def test_add(self):
        self.assertEqual(add(1, 2), 3)
        self.assertEqual(add(0, 0), 0)
        self.assertEqual(add(-1, 1), 0)

В этом классе тестовых случаев мы унаследовали класс unittest.TestCase и определили метод test_add(). В этом методе мы используем метод self.assertEqual() для проверки корректности функции. Этот метод сравнивает выходные данные функции с ожидаемыми выходными данными для равенства. Если они равны, тест пройден, в противном случае тест не пройден.

Далее нам нужно запустить этот тестовый пример. Мы можем использовать метод unittest.main() для запуска этого теста:

if __name__ == '__main__':
    unittest.main()

Когда мы запустим этот тестовый пример, unittest автоматически запустит метод test_add() и выведет результаты теста. Если все тесты пройдены, мы увидим следующий вывод:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Этот вывод указывает, что тест пройден.

Наконец, мы можем использовать модуль покрытия для анализа покрытия. Мы можем сгенерировать отчет о покрытии, используя следующую команду:

coverage run test_add.py
coverage report

Эта команда сгенерирует отчет о покрытии, сообщая нам, какой код покрыт тестами, а какой нет:

Name     Stmts   Miss  Cover
------------------------------
add         2      0   100%
TOTAL       2      0   100%

Этот отчет говорит нам, что наши тесты охватывают весь код функции add().


Подведем итог

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

おすすめ

転載: blog.csdn.net/u010665216/article/details/130397164