关于使用PyCharm IDE进行Python覆盖率测试,我有一个非常基本的要求。在我的Django模型中,我的测试未涵盖所有__str__
方法。
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
测试这些内容的合适方法是什么?
这不起作用,测试可以运行,但是__str__
方法仍然没有被覆盖。
class TestCategory(TestCase):
def test_category(self):
category = Category.objects.create(name='Test Category')
self.assertEqual(category.__str__(), 'Test Category')
提前感谢您的帮助!
答案 0 :(得分:2)
只要您在对象上调用__str__()
,就会调用str()
方法。
您应该在实例对象上使用str()
方法进行尝试。
class TestCategory(TestCase):
def test_category(self):
category = Category.objects.create(name='Test Category')
self.assertEqual(str(category), 'Test Category')
答案 1 :(得分:0)
Astik Anand已经提供了一个很好的答案,说明了如何从技术上强制执行__str__()
方法。但是,我想通过不同的解释来回答您的问题-考虑到评论中的新信息,即覆盖工具似乎存在问题:
“尽管我知道我的覆盖工具是错误的,但无论如何我到目前为止都无法将__str__()
标记为被该工具覆盖,我应该如何测试__str__()
方法呢? “。
退后一步。忘了报道吧。覆盖范围不是您的目标。您的目标是找到所有可能在__str__()
中发现的错误。因此,请根据需要全面测试__str__()
以实现此目标。这是测试__str__()
的方法(从心理上,而不是技术上)。
很抱歉,如果您仍然认为这很清楚-您将不相信人们在遇到错误的覆盖工具时会做什么,以实现他们的覆盖目标...
答案 2 :(得分:0)
我遇到了同样的问题。我使用来自
的以下信息解决了这个问题https://django-testing-docs.readthedocs.io/en/latest/coverage.html
pip install django-nose
在settings.py
将 django_nose
添加到 INSTALLED_APPS
另外,在文件底部添加:
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = [
'--with-coverage',
'--cover-package=app_1,app_2',
'--cover-html' ]
我从命令行运行了覆盖 HTML,报告显示我的模型中的 __str__
方法被覆盖了。