Есть две строки, которые не выполняются django тестами, когда они называются self.assertRaises.
Я использую: Python 3.6.9, Django 3, Coverage.
У меня есть этот класс:
class AverageWeatherService:
subclasses = WeatherService.__subclasses__()
valid_services = {
subclass.service_key: subclass for subclass in subclasses
}
@classmethod
def _check_service(cls, one_service):
if one_service not in cls.valid_services:
logger.exception("Not valid service sent")
raise NotValidWeatherFormException("Not valid service sent")
И у меня есть локальный API, который включен в мой p c.
Затем я написал этот тест:
def test_integration_average_temp_services_error(self):
self.assertRaises
(
NotValidWeatherFormException,
AverageWeatherService()._check_service,
"MyFakeService",
)
И хотя проверка прошла успешно с , когда assert повышается должным образом, этот тест не добавляет покрытие , но если я вызываю этот метод не так, как этот:
def test_integration_average_temp_services_error2(self):
self.assertRaises
(
NotValidWeatherFormException,
AverageWeatherService()._check_service("MyFakeService")
)
Тогда, конечно, я получаю ошибку при выполнении теста, потому что исключение вызывается и неправильно перехватывается assertRaises НО Это добавляет покрытие. Если я выполню этот тест неправильно, мой код будет покрыт на 100%. Если я использую assertRaises в качестве первого способа, эти две строки не покрываются (в соответствии с покрытием html).
logger.exception("Not valid service sent")
raise NotValidWeatherFormException("Not valid service sent")
Кроме того, если я выполняю метод первым способом, исключение регистратора не отображается в консоли, а когда я запускаю тесты вторым способом, я могу визуализировать исключение logger.exception на терминале.
Любые идеи что происходит?
Заранее спасибо.