1. Введение
В разработке программного обеспечения модульное тестирование — это метод тестирования, используемый для проверки правильности отдельных компонентов программного обеспечения, таких как функции или методы. Python предоставляет встроенную библиотеку модульного тестирования под названием unittest
, которую можно использовать для написания тестового кода, затем запускать тесты и сообщать о результатах тестов.
Эта статья покажет вам, как использовать unittest
для написания и запуска модульных тестов. Прочитав эту статью, вы поймете unittest
основы использования , а также то, как использовать unittest
метод утверждения и организационную структуру тестового примера в .
2. Основные понятия и методы
В unittest
, каждый тестовый набор является unittest.TestCase
экземпляром , а набор тестовых наборов является набором тестов. Вы можете unittest.TestCase
определить свои тестовые примеры, реализовав подклассы, а затем создать конкретные тестовые случаи, создав экземпляры объектов этого подкласса.
Вот простой пример, демонстрирующий, как определять и использовать тестовые случаи:
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'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
if __name__ == '__main__':
unittest.main()
В приведенном выше коде мы определяем TestStringMethods
класс, который наследуется от unittest.TestCase
. В этом классе мы определяем три метода test_upper
: test_isupper
и test_split
. Эти три метода являются нашими тремя тестовыми примерами.
unittest.TestCase
Класс предоставляет ряд методов утверждения, таких как assertEqual(a, b)
, assertTrue(x)
и assertFalse(x)
. Эти методы утверждения используются для проверки того, что наш код ведет себя так, как ожидалось.
3. Запустите тест и просмотрите результаты теста
После того, как мы определим тестовые случаи, мы можем запустить эти тестовые случаи и просмотреть результаты тестов. Вы можете unittest.main()
запустить все тестовые примеры, выполнив .
В конце приведенного выше кода мы вызываем unittest.main()
. Эта функция будет искать все unittest.TestCase
подклассы в текущем модуле, а затем запускать все test
методы, начиная с в этих подклассах.
Когда мы запустим этот код, unittest
будет выведен отчет о тестировании, показывающий результаты каждого тестового примера. Например, если все тестовые случаи пройдены, вы увидите следующий вывод:
....
----------------------------------------------------------------------
Ran 4 tests in 0.001s
OK
4. Использование тестовых загрузчиков и тестовых бегунов
Загрузчик тестов используется для поиска и загрузки тестов, а средство запуска тестов отвечает за выполнение этих тестов и отчет о результатах. Библиотека unittest Python предоставляет нам загрузчики тестов и средства запуска тестов по умолчанию, однако вы также можете настроить их для удовлетворения особых потребностей.
Вот пример, который демонстрирует, как использовать unittest.TestLoader
для загрузки тестов:
import unittest
class TestStringMethods(unittest.TestCase):
# ... 前面的内容 ...
def suite():
suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestStringMethods))
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(suite())
В этом примере мы сначала создаем unittest.TestLoader
экземпляр . Затем мы вызываем loadTestsFromTestCase
метод, который загружает TestStringMethods
все тесты, определенные в классе. Затем мы добавили эти тесты в набор тестов.
Что касается средства выполнения тестов, класс unittest
предоставляется unittest.TextTestRunner
в качестве средства выполнения тестов по умолчанию. Экземпляры этого класса будут выводить текстовый отчет на консоль. Если вы хотите настроить средство запуска тестов, вы можете unittest.TestRunner
сделать это, расширив класс.
5. Набор тестов
Набор тестов — это набор тестовых случаев или наборов тестов. Он используется для указания unittest
тестов, которые необходимо выполнить. Создавая свои собственные наборы тестов, вы можете точно контролировать, unittest
какие тесты выполняются. Ниже приведен пример создания набора тестов и добавления тестовых случаев:
import unittest
class TestStringMethods(unittest.TestCase):
# ... 与前文相同 ...
def suite():
suite = unittest.TestSuite()
suite.addTest(TestStringMethods('test_upper'))
suite.addTest(TestStringMethods('test_isupper'))
return suite
if __name__ == '__main__':
runner = unittest.TextTestRunner()
runner.run(suite())
В этом примере мы создаем suite
функцию, которая создает unittest.TestSuite
экземпляр, а затем добавляет тестовые случаи в этот экземпляр. В main
этом разделе мы создаем unittest.TextTestRunner
экземпляр и вызываем его run
метод для запуска набора тестов.
Шесть, методы setUp и tearDown
В дополнение к методам, используемым для тестирования, unittest.TestCase
предусмотрены два специальных метода: setUp
и tearDown
. Эти два метода выполняются до и после каждого метода тестирования и могут использоваться для подготовки тестовой среды и очистки ресурсов.
Вот пример использования setUp
and :tearDown
import unittest
class TestDatabaseMethods(unittest.TestCase):
def setUp(self):
self.conn = create_database_connection()
self.cur = self.conn.cursor()
def tearDown(self):
self.cur.close()
self.conn.close()
def test_insert(self):
self.cur.execute("INSERT INTO employees VALUES (1, 'John')")
self.cur.execute("SELECT * FROM employees")
result = self.cur.fetchone()
self.assertEqual(result, (1, 'John'))
if __name__ == '__main__':
unittest.main()
В этом примере мы setUp
создаем соединение с базой данных и курсор в методе и tearDown
закрываем их в методе. Таким образом, мы можем гарантировать, что каждый тестовый метод запускается в чистой среде базы данных.
Семь, unittest.mock: имитация объектов и поведения.
В некоторых случаях может потребоваться заменить некоторые тестируемые объекты или смоделировать определенное поведение. unittest.mock
Модули предоставляют Mock
класс и множество других инструментов, которые помогут вам сделать это.
Вот unittest.mock
пример использования:
from unittest import TestCase, mock
from my_module import MyObject
class TestMyObject(TestCase):
@mock.patch('my_module.MyObject')
def test_my_method(self, MockMyObject):
obj = MockMyObject()
obj.my_method.return_value = 42
assert obj.my_method() == 42
obj.my_method.assert_called_once()
В этом примере мы использовали unittest.mock.patch
декоратор для замены MyObject
класса. Затем мы можем управлять поведением этого резервного объекта, например, устанавливать, какие значения возвращают его методы, или проверять правильность вызова его методов.
В целом, среда Python unittest
предоставляет нам мощные и гибкие инструменты для модульного тестирования. Это только unittest
верхушка айсберга, есть много других функций, которые ждут вас, чтобы открыть для себя и использовать.
Ниже приводится вспомогательная информация.Для друзей, которые занимаются [тестированием программного обеспечения], это должен быть самый полный и полный склад подготовки.Этот склад также сопровождал меня в самом сложном путешествии.Я надеюсь, что он может помочь и вам!
Апплет интервью по тестированию программного обеспечения
Банк тестовых вопросов по программному обеспечению заполнен миллионами людей! ! ! Кто знает! ! ! Самая полная мини-программа-викторина во всей сети, вы можете использовать свой мобильный телефон, чтобы делать викторины, в метро или в автобусе, сверните его!
Рассматриваются следующие разделы вопросов интервью:
1. Базовая теория тестирования программного обеспечения, 2. Веб, приложение, функциональное тестирование интерфейса, 3. Сеть, 4. База данных, 5. Linux
6. веб, приложение, автоматизация интерфейса, 7. тестирование производительности, 8. основы программирования, 9. вопросы на собеседовании, 10. вопросы открытого теста, 11. тестирование безопасности, 12. основы работы с компьютером
Метод получения информации: