Предоставляет ли Python поддержку Предположений в качестве предварительных условий?

Допущения в модульных тестах Python

Предоставляет ли Python поддержку Предположений, которые будут использоваться в качестве предварительных условий для тестов, аналогичных тем, которые предоставляются JUnit с assumeThat(...) методы для Java.

Это важно из-за применения Hoare Logic, чтобы процитировать JUnit:

Набор методов, полезных для формулировки предположений об условиях, в которых тест имеет смысл. Неудачное предположение не означает, что код не работает, но тест не дает полезной информации. Предположим, что в основном означает "не запускать этот тест, если эти условия не применяются". Бегун JUnit по умолчанию пропускает тесты с ошибочными предположениями. Пользовательские бегуны могут вести себя по-разному.

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

class LoggingTestCase(unittest.TestCase):
    def assumeTrue(self, expr: Any, msg: Any = ...) -> None:
        try:
            super().assertTrue(expr, msg)
            self.test_result = TestResult.PASSED
        except AssertionError as e:
            self.test_result = TestResult.SKIPPED
            raise InvalidAssumption(e)

С этим юнит-тестом поведения:

class TestLoggingTestCase(LoggingTestCase):
    def test_assumeTrue(self):
        self.assertRaises(InvalidAssumption, self.assumeTrue, False)  # Passes as expected.
        self.assertRaises(InvalidAssumption, self.assumeTrue, True)  # Fails as expected.

Этот подход, кажется, демонстрирует правильное поведение, которое я хочу, это лучший подход, есть ли лучший способ сделать это, или использовать стороннюю библиотеку? Я ищу лучший способ, чем обернуть все базовые утверждения таким образом, чтобы сделать свои собственные предположения.

1 ответ

Я использую pytest skipif для этой цели.

http://doc.pytest.org/en/latest/skipping.html

Другие вопросы по тегам