类__str__的Python测试覆盖率

时间:2019-07-15 11:39:19

标签: django python-3.x unit-testing pycharm coverage.py

关于使用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')

提前感谢您的帮助!

3 个答案:

答案 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

  1. pip install django-nose

  2. 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__ 方法被覆盖了。