python - Django 测试不使用 AssertRaises 添加覆盖率
问题描述
当它们被称为 self.assertRaises 时,有两行没有被 django 测试执行。
我正在使用: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。
然后我写了这个测试:
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.exception。
关于发生了什么的任何想法?
提前致谢。
解决方案
我可以解决它。
这是解决方法:
def test_integration_average_temp_services_error(self):
with self.assertRaises(NotValidWeatherFormException):
AverageWeatherService()._check_service("MyFakeService")
推荐阅读
- oracle - Glogin.sql 用于 Oracle 上的可插拔数据库或不同数据库
- ruby-on-rails - Rails 6/Webpacker 不向 React 提供静态资产
- javascript - 为什么不返回结果的数组上的过滤器方法不会在javascript中给出一个空数组?
- html - 从 IE 中的 Tab 键顺序中排除输入元素
- javascript - 如何更改调用Vue实例方法的`this`上下文?
- java - Selenium - 在另一个类中调用方法,但不能重用驱动程序
- java - Spring Kafka - 代理重新连接事件
- swift - 为什么快速字符串中的“\ n”在略有不同的情况下表现不同?
- android - 如何将内容从文本文件复制到android中的数据库
- java - android条件语句检查char是否为单引号