Модульное тестирование — это метод тестирования программного обеспечения, при котором тестируется наименьшая тестируемая единица, обычно функция или метод.
В процессе разработки программного обеспечения модульное тестирование широко используется как важный метод тестирования.
Модульное тестирование является важной частью разработки программного обеспечения и выполняет следующие функции:
Различные языки программирования имеют свои собственные среды модульного тестирования. К основным средам модульного тестирования в Python относятся:
В этой статье основное внимание будет уделено гонорарам за тестирование, входящим в состав Python. unittest
unittest
Введение в структуруunittest
фон рамкиипроизводитьunittest
Является ли среда модульного тестирования Java JUnit
изPythonВерсия。unittest
Первоначально автор:Pythonизосновной разработчикTim Разработанный Питерсом в 2001 году, он призван предоставить стандартизированный способ написания модульных тестов для уменьшения задержек, вызванных традиционной отладкой из-за проб и ошибок.
Фреймворк unittest имеет следующие особенности и преимущества:
unittest
даPythonиз Встроенный модуль,Поэтому вам не нужна дополнительная установка.
unittest
Простой примерТестируемая демонстрация кода содержит два метода: add
и sub
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
def add(a, b):
return a + b
def sub(a, b):
return a - b
Напишите примеры модульного тестирования для этих двух функций.
import unittest
from calculate import add, sub
class TestCalcuate(unittest.TestCase):
def test_add(self):
result = add(2, 3)
self.assertEqual(result, 5)
def test_sub(self):
result = sub(5, 3)
self.assertEqual(result, 2)
if __name__ == '__main__':
unittest.main()
В этом тестовом примере,Мы импортировалиadd
иsub
функция,и создал файл с именем TestCalcuate
из Тестовый класс(всеиз Тестовый класс都必须даunittest.TestCase
из Подкласс)。в этом классе,Мы определяем два метода тестированияtest_add
иtest_sub
,Используется для проверки поведения функций сложения и вычитания соответственно.
в каждом методе испытаний,Вызовем соответствующую функцию,и использоватьself.assertEqual
метод условие, чтобы проверить, равен ли вычисленный результат ожидаемому значению.
наконец,мы используемunittest.main()
запускать тестовые случаи。
unittest
рамка Часто используемые категории тестовиметодПлатформа модульного тестирования Python предоставляет множество классов и методов, помогающих создавать модульные тесты.
unittest.TestCase
:этотдаunittestрамкасамый важныйиз Тестовый класс,Все тестовые случаи должны наследовать от него. В нем представлены некоторые часто используемые методы утверждения и вспомогательные методы тестирования.,Используется для написания и запуска тестов.unittest.TestSuite
:Этот класс используется для организациии Управление набором тестовых случаев。Вы можете добавить несколько тестовых случаев в набор тестов.,и запустить их все за один раз.unittest.TestLoader
:Этот класс используется для загрузки тестовых случаев。это обеспечивает некоторыеметод,Тестовые случаи могут быть автоматически обнаружены и загружены из модулей, классов или каталогов.unittest.TextTestRunner
:этот个добрый用于Запустить тестовый примери генерировать результаты испытанийизтекстовый отчет。это обеспечивает некоторыеметод,Вы можете контролировать формат вывода и уровень детализации теста.unittest.TestResult
:Этот класс используется для хранения результатов тестов.。это обеспечивает некоторыеметод,Вы можете получить статус теста, информацию об ошибках, информацию о сбоях и т. д.В рамках unittest Часто используемые методывключатьsetUp()
、tearDown()
、setUpClass()
иtearDownClass()
。этот些методиспользуется в тестовых случаяхиз Подготовьтесь во время выполненияиочистка。
setUp()
метод:в каждом тестеметодперед бегомвызов。Он используется для подготовки тестовой среды.,Например, инициализируйте объект、Открытие файлов и т. д.。каждый тестметодбудет тамвызовsetUp()
метод После выполнения。tearDown()
метод:в каждом тестеметод После запускавызов。Он используется для очистки тестовой среды.,Например, закройте файл、Освободить ресурсы и т. д.。каждый тестметодбудет тамвызовtearDown()
метод После выполнения。setUpClass()
метод:在Тестовый класс中извсе测试методперед бегомвызов。он используется для одноразового выполненияиз Подготовка тестовой среды,Например, подключиться к базе данных、Запустить сервер и т. д.。setUpClass()
методнуждатьсяиспользовать@classmethod
Декоратор для маркировки。tearDownClass()
метод:在Тестовый класс中извсе测试метод После запускавызов。он используется для одноразового выполненияизтестовая средаочистка,Например, отключиться от базы данных、Выключите сервер и т. д.。tearDownClass()
методнуждатьсяиспользовать@classmethod
Декоратор для маркировки。Эти методы можно переопределить в тестовом классе и настроить по мере необходимости.
При написании тестовых случаев с использованием фреймворка unittest обычно необходимо выполнить следующие шаги:
unittest.TestCase
из Тестовый класс。test_
начало,Чтобы unittest мог автоматически распознавать и запускать их.unittest.TestLoader
Класс для загрузки тестовых случаев。ты можешьиспользоватьloadTestsFromModule()
метод Загрузить тестовые примеры из модуля,илииспользоватьloadTestsFromTestCase()
метод从Тестовый класс中加载测试用例。unittest.TestSuite
объект,и загрузитсяиз Добавьте тестовые примеры в набор тестов。ты можешьиспользоватьaddTest()
метод Добавьте один тестовый пример,илииспользоватьaddTests()
метод Добавить несколько тестовых случаев。unittest.TextTestRunner
добрыйзапускать тестовые случаии генерировать результаты испытанийизтекстовый отчет。unittest.TextTestRunner
объект。run()
метод Запустите набор тестов,и вывести результаты в консоль или файл.В сочетании с предыдущим примером мы дополнительно продемонстрируем, как писать, управлять и запускать тестовые случаи:
import unittest
class MyTestCase(unittest.TestCase):
def test_add(self):
result = 2 + 2
self.assertEqual(result, 4)
def test_sub(self):
result = 5 - 3
self.assertEqual(result, 2)
if __name__ == '__main__':
# Создайте набор тестов и добавьте тестовые примеры
suite = unittest.TestSuite()
suite.addTest(MyTestCase('test_add'))
suite.addTest(MyTestCase('test_sub'))
# Создайте средство запуска тестов и запустите набор тестов.
runner = unittest.TextTestRunner()
runner.run(suite)
В этом примере,Мы создали файл под названиемMyTestCase
из Тестовый класс,и определил в нем два тестаметодtest_add
иtest_sub
。Затем,Мы создали набор тестов,и использоватьaddTest()
метод将Добавьте тестовые примеры в набор тестов。наконец,Мы создали тест-раннер,и использоватьrun()
метод Запустите набор тестов。
Запустите этот пример,Вы увидите результаты теста. Если все тесты пройдены,Вы увидите сообщение об успехе. Если какой-либо тест не пройден,Вы увидите сообщение об ошибке и подробную информацию об ошибке.
Это основные шаги по написанию, управлению и запуску тестовых примеров с использованием unittest. При необходимости вы можете написать больше тестовых методов и использовать различные утверждения методов для проверки поведения вашего кода.
unittest
Обычно используетсяизметод утвержденияконечно! Ниже приведены наиболее часто используемые методы утверждения в unittest, представленные в таблице уценки:
метод утверждения | описывать |
---|---|
assertEqual(a, b) | Утверждаем, что aиb равны |
assertNotEqual(a, b) | Утверждаем, что aиb не равно |
assertTrue(x) | Утвердить, что x истинно |
assertFalse(x) | Утвердить, что x является ложным |
assertIs(a, b) | Утвердить, что aиb — один и тот же объект |
assertIsNot(a, b) | Утвердить, что aиb — это не один и тот же объект |
assertIsNone(x) | Утвердите, что x равен None |
assertIsNotNone(x) | Утвердите, что x не равен None |
assertIn(a, b) | утверждать, что a находится в b |
assertNotIn(a, b) | Утверждать, что a не входит в b |
assertIsInstance(a, b) | Утвердите, что a является экземпляром b |
assertNotIsInstance(a, b) | Утвердите, что a не является экземпляром b |
assertRaises(exception, callable, *args, **kwargs) | Утвердите, что вызов callable(*args, **kwargs) вызовет указанное исключение. |
assertWarns(warning, callable, *args, **kwargs) | Утвердите, что вызов callable(*args, **kwargs) вызовет указанное предупреждение. |
assertLogs(logger=None, level=None) | Утвердить, что указанный уровень ведения журнала произошел на указанном средстве ведения журнала. |
assertAlmostEqual(a, b, places=None, msg=None, delta=None) | Утверждают, что aиb примерно равны |
assertNotAlmostEqual(a, b, places=None, msg=None, delta=None) | Утверждают, что aиb приблизительно не равны |
assertSequenceEqual(a, b, msg=None, seq_type=None) | Утвердить, что aиb — одна и та же последовательность |
assertListEqual(a, b, msg=None) | Утвердить, что aиb — один и тот же список |
assertTupleEqual(a, b, msg=None) | Утверждаем, что aиb — идентичные кортежи. |
assertSetEqual(a, b, msg=None) | Утвердить, что aиb — одно и то же множество. |
assertDictEqual(a, b, msg=None) | Утверждать, что aиb — это одни и те же словари |
Эти методы утверждения может выбрать подходящий метод в соответствии с вашими потребностями, чтобы написать тестовые примеры и проверить, ведет ли код ожидаемое поведение.