Модуль unittest — это встроенная среда тестирования Python. Он предоставляет инструменты тестирования и средства запуска тестов, которые помогают нам создавать тестовые примеры и запускать их. Основное использование модуля unittest — создание тестовых примеров, написание тестовых методов и запуск тестовых примеров.
Вот пример написания тестового примера с использованием модуля unittest:
import unittest
class TeststringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# Проверка s.split сама по себе не меняет s
self.assertEqual(s, 'hello world')
if __name__ == '__main__':
unittest.main()
В этом примере мы определяем тестовый пример с именем TespythontringMethods и определяем в нем три тестовых метода: test_upper(), test_isupper() и test_split(). Эти методы тестирования используются для проверки правильности строковых методов. Например, метод test_upper() проверяет, может ли метод Upper() преобразовать строку в прописные буквы, и проверяет, соответствует ли это нашим ожиданиям.
После написания тестовых примеров нам необходимо запустить их, чтобы убедиться в корректности кода. Модуль unittest предоставляет несколько методов для запуска тестовых случаев. Самый распространенный метод — использование функции unittest.main(). Мы можем добавить следующий код в конце кода:
import unittest
if __name__ == '__main__':
unittest.main()
Это запустит все методы тестирования и выведет результаты тестирования.
Существуют и другие способы запуска тестовых случаев, например использование классов unittest.TextTestRunner() и unittest.TestLoader(). Например, мы можем использовать TextTestRunner для запуска тестовых случаев:
import unittest
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# Проверка s.split сама по себе не меняет s
self.assertEqual(s, 'hello world')
if __name__ == '__main__':
# Создать набор тестов
suite = unittest.TestSuite()
# Добавить вариант использования теста в набор тестов
suite.addTest(TestStringMethods('test_upper'))
suite.addTest(TestStringMethods('test_isupper'))
suite.addTest(TestStringMethods('test_split'))
# Запустите набор тестов с помощью TextTestRunner
runner = unittest.TextTestRunner()
runner.run(suite)
Это создаст набор тестов и добавит в него три метода тестирования. Затем мы используем TextTestRunner для запуска набора тестов и вывода результатов теста.
В модуле unittest,Утверждение — это ключевой компонент, используемый для проверки соответствия результатов теста ожидаемым. Модуль unittest предоставляет множество различных типов утверждений.,включать:
•assertEqual(a, b): проверяет, равны ли a и b •assertNotEqual(a, b): проверяет, не равны ли a и b •assertTrue(x): проверяет, является ли x истинным •assertFalse(x): проверяет, является ли x имеет значение False•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
В предыдущем примере,Мы используем много разных типов утверждений. Например,В методе test_upper(),Мы использовали утверждение AssertEqual(), чтобы проверить, равен ли 'foo'.upper() 'FOO'.
При написании более сложных тестов нам может потребоваться использовать некоторые расширенные функции модуля unittest. Вот несколько примеров расширенного использования:
Методы setUp() и TearDown() — два часто используемых метода в модуле unittest. Методы setUp() и TearDown() автоматически запускаются до и после выполнения каждого тестового метода. Метод setUp() используется для инициализации тестового состояния, а метод TearDown() используется для очистки тестового состояния. Например, мы можем создать тестовый файл с помощью метода setUp() и удалить файл с помощью метода TearDown().
import unittest
import tempfile
import os
class TestFileMethods(unittest.TestCase):
def setUp(self):
self.test_file = tempfile.NamedTemporaryFile(delete=False)
def tearDown(self):
os.remove(self.test_file.name)
def test_write_file(self):
with open(self.test_file.name, 'w') as f:
f.write('hello world')
with open(self.test_file.name, 'r') as f:
content = f.read()
self.assertEqual(content, 'hello world')
if __name__ == '__main__':
unittest.main()
В этом примере мы создаем тестовый пример с именем TestFileMethods и определяем в нем тестовый метод test_write_file(). В методе setUp() мы создаем временный файл и удаляем файл в методе TearDown(). Метод test_write_file() проверяет, можно ли записать «hello world» в файл, и проверяет, соответствует ли содержимое файла ожидаемому.
Модуль unittest поддерживает использование декораторов для управления поведением тестов. Например, мы можем использовать декоратор @unittest.expectedFailure, чтобы пометить метод тестирования как ожидаемый как провальный.
import unittest
def test_subtract(self):
self.assertEqual(1 - 2, -1)
@unittest.expectedFailure
def test_divide(self):
self.assertEqual(1 / 0, 0)
if __name__ == '__main__':
unittest.main()
В этом примере мы определяем три метода тестирования. Методы test_add() и test_subtract() являются обычными методами тестирования. Ожидается, что метод test_divide() завершится неудачей, поскольку мы пытаемся разделить 1 на 0. Мы помечаем метод test_divide() декоратором @unittest.expectedFailure, чтобы сообщить модулю unittest ожидать сбоя метода тестирования.
Иногда, при определенных условиях, мы можем захотеть пропустить определенные тесты. Для этого модуль unittest предоставляет декоратор @unittest.skip.
import unittest
class TestMathMethods(unittest.TestCase):
def test_add(self):
self.assertEqual(1 + 2, 3)
@unittest.skip('skip subtract test')
def test_subtract(self):
self.assertEqual(1 - 2, -1)
def test_multiply(self):
self.assertEqual(2 * 3, 6)
if __name__ == '__main__':
unittest.main()
В этом примере мы определяем три метода тестирования. Оба метода test_add() и test_multiply() являются обычными методами тестирования. Метод test_subtract() помечен как пропущенный, поскольку мы использовали декоратор @unittest.skip('skip subtract test').
Модуль unittest — очень полезная среда тестирования на Python.,Он предоставляет мощный набор инструментов для написания и запуска тестов. в этой статье,Мы представили базовое использование модуля unittest.,Включает в себя, как писать тестовые сценарии использования, методы и утверждения. Мы также рассмотрим некоторые расширенные варианты использования,Включает методы setUp() и TearDown(), Декоратор и Skiptest. Надеюсь, эта статья поможет вам лучше понять модуль unittest.,И напишите лучший код Pythontest.