How do I get 100% in my model coverage tests?

I have set up coverage for my Django project. Output:

     Name                               Stmts   Miss  Cover   
    ----------------------------------------------------------------     15      5    67%   2, 19-25


I've tested everything I can think of for this model, what are the 5 missing links?

Here is my model:

class Company(models.Model):
    Describes a Company within the system.
    name = models.CharField(max_length=60)
    address_line1 = models.CharField(max_length=120)
    address_line2 = models.CharField(max_length=120, null=True, blank=True)
    address_city = models.CharField(max_length=120)
    address_county = models.CharField(max_length=120, null=True, blank=True)
    address_country = models.CharField(max_length=4, choices=COUNTRY_CHOICES, default="US")
    address_postcode = models.CharField(max_length=12)

    class Meta:
        app_label = "testapp"

    def company_user_count(self):
        Return count of the numbers of users that belong to a company.
        :return: int
        return self.users.count()


My tests:

class CompanyModel(TestCase):

    def setUp(self): = CompanyFactory.create()

    def tearDown(self):

    def test_create_new_company_creation(self):
        Ensure that a new company can be created.
        company = CompanyFactory(name="Test Co")
        noz.assert_equal(, "Test Co")

    def test_user_is_company(self):
        Test relationship on user to company method is_company_user().
        company = CompanyFactory.create()
        company_user = UserFactory.create(company=company)
        noz.assert_equal(company_user.is_company_user(), True)

    def test_company_user_relationship(self):
        Test correct relationship on company is made to user.
        company = CompanyFactory.create()
        user = UserFactory.create(company=company)
        noz.assert_equal(, "Valhalla Ltd")

    def test_one_to_many_company_relationship(self):
        Test company relationship of one-to-many with users.
        company = CompanyFactory.create()
        user1 = UserFactory.create(company=company)
        user2 = UserFactory.create(company=company)
        noz.assert_equal(company.company_user_count(), 2)



source to share

3 answers

Run the coverage utility with html output and it will tell you which lines or branches you failed to check out.

If you are using django-nose to run the tests, add the parameter --cover-html

and --cover-html-dir=<DIR>

the settingNOSE_ARGS


See the approximate output from the scope documentation.



There are 5 statements that your test does not cover, usually beyond the conditional. For example, if you have:

if val == 3:
    return 0
    return 1


And you don't try val = 3

, then there will be a statement that will not be covered by the test.

Your tests don't matter. What matters is what they do with the project under test. You should check the coverage, I recommend doing cov.html_report

it because I'm used to the coverage module. html_report

will give a nice html folder full of data from the project under test and you will see what is missing.


import coverage
cov = coverage.coverage( ...)

# do something about unittest and running the test





If you are using django-nose

, there is a problem with the wrong coverage for the models .

Using the coverage itself without the Django plugin shows the correct result for coverage:

coverage erase
coverage run --branch ./ test
coverage report -m




All Articles