3 варианта пропуска теста в Python

Модуль unittest в Python позволяет пропустить тестовый метод или тестовый класс. Чтобы пропустить тест, у вас есть три доступных варианта:

  • Используйте декоратор @unittest.skip().
  • Вызовите метод SkipTest() класса TestCase.
  • Вызовите исключение SkipTest.
Содержание

Пример пропуска методов тестирования

В следующем примере используется декоратор @unittest.skip() для безусловного пропуска метода test_case_2():

import unittest


class TestDemo(unittest.TestCase):
    def test_case_1(self):
        self.assertEqual(1+1, 2)

    @unittest.skip('Work in progress')
    def test_case_2(self):
        pass

Запустите тест:

python -m unittest -v

Выход:

test_case_1(test_skipping.TestDemo) ... ok
test_case_2(test_skipping.TestDemo) ... skipped 'Work in progress'

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK(skipped=1)

Вывод показывает, что два теста были выполнены, а один пропущен. Для пропущенного теста выходные данные показывают сообщение, которое мы передали декоратору @unittest.skip().

Аналогичным образом вы можете вызвать SkipTest() в методе тестирования, чтобы пропустить его:

import unittest


class TestDemo(unittest.TestCase):
    def test_case_1(self):
        self.assertEqual(1+1, 2)

    def test_case_2(self):
        self.skipTest('Work in progress')

Запустите тест:

python -m unittest -v

Выход:

test_case_1(test_skipping.TestDemo) ... ok
test_case_2(test_skipping.TestDemo) ... skipped 'Work in progress'

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK(skipped=1)

Кроме того, вы можете вызвать исключение SkipTest в методе тестирования, чтобы пропустить его.

import unittest


class TestDemo(unittest.TestCase):
    def test_case_1(self):
        self.assertEqual(1+1, 2)

    def test_case_2(self):
        raise unittest.SkipTest('Work in progress')

Запустите тест:

python -m unittest -v

Выход:

test_case_1(test_skipping.TestDemo) ... ok
test_case_2(test_skipping.TestDemo) ... skipped 'Work in progress'

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK(skipped=1)

Пример пропуска тестового класса

Чтобы пропустить тестовый класс, вы используете декоратор @unittest.skip() на уровне класса.

В следующем примере используется декоратор @unittest.skip() на уровне класса. Следовательно, все тесты класса TestDemo пропускаются:

import unittest


@unittest.skip('Work in progress')
class TestDemo(unittest.TestCase):
    def test_case_1(self):
        self.assertEqual(1+1, 2)

    def test_case_2(self):
        self.assertIsNotNone([])

Запустите тест:

python -m unittest -v

Выход:

test_case_1(test_skipping.TestDemo) ... skipped 'Work in progress'
test_case_2(test_skipping.TestDemo) ... skipped 'Work in progress'

----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK(skipped=2)

Пропуск теста с условием

Иногда хочется условно пропустить тест. Например, вы можете пропустить тест, если текущая платформа, на которой выполняется тест, — Windows.

Для этого вы используете декоратор @unittest.skipIf():

@unittest.skipIf(condition, reason)

Это позволит пропустить тест, если условие истинно. Кроме того, в результатах теста будет указана причина пропуска теста.

Например:

import unittest

from sys import platform


class TestDemo(unittest.TestCase):
    def test_case_1(self):
        self.assertEqual(1+1, 2)

    @unittest.skipIf(platform.startswith("win"), "Do not run on Windows")
    def test_case_2(self):
        self.assertIsNotNone([])

В этом примере мы пропускаем метод test_case_2(), если текущей платформой является Windows. Чтобы получить текущую платформу, на которой выполняется тест, мы используем свойство sys.platform.

Запустите тест:

python -m unittest -v

Выход:

test_case_1(test_skipping.TestDemo) ... ok
test_case_2(test_skipping.TestDemo) ... skipped 'Do not run on Windows'

----------------------------------------------------------------------
Ran 2 tests in 0.001s

OK(skipped=1)

В отличие от декоратора @unittest.skipIf, @unittest.skipUnless пропускает проверку, если условие истинно:

@unittest.skipUnless(condition, reason)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *