当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,在我的PC上。
然后我写了这个测试。
def test_integration_average_temp_services_error(self):
self.assertRaises
(
NotValidWeatherFormException,
AverageWeatherService()._check_service,
"MyFakeService",
)
虽然测试是成功的 assert raises正确使用这个测试并没有增加覆盖面。 但如果我以错误的方式调用这个方法,比如这个方法。
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异常没有显示在控制台,而当我以第二种方式运行测试时,我能够在终端上看到logger.exception。
有什么办法可以解决这个问题吗?
先谢谢你了。
我可以解决它。
这就是工作方法。
def test_integration_average_temp_services_error(self):
with self.assertRaises(NotValidWeatherFormException):
AverageWeatherService()._check_service("MyFakeService")