Предоставляет ли 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 для этой цели.