Допущения в модульных тестах Python
Обеспечивает ли Python поддержку предположений, которые будут использоваться в качестве предварительных условий для тестов, аналогичных тем, которые предоставляются JUnit с assumeThat(...)
методами для Java.
Это важно из-за применения Hoare Logic , чтобы процитировать JUnit:
Набор полезных методовдля высказывания предположений об условиях, в которых тест имеет смысл.Неудачное предположение не означает, что код не работает, но тест не дает полезной информации.Предположим, что в основном означает «не запускать этот тест, если эти условия не применяются».Бегун JUnit по умолчанию пропускает тесты с ошибочными предположениями.Пользовательские бегуны могут вести себя по-разному .
Кажется, что Python не предоставляет их "из коробки" в своей инфраструктуре unittest .Я предварительно определил свой собственный подход, расширив 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.
Этот подход, кажется, демонстрирует правильное поведение, которое я хочу, этоэто лучший подход, есть ли лучший способ сделать это, или использовать стороннюю библиотеку?Я ищу лучший способ, чем обернуть все базовые утверждения таким образом, чтобы сделать свои собственные предположения.