Как я могу улучшить покрытие кода Python3 - PullRequest
3 голосов
/ 24 октября 2019

С unittest и Coverage.py,

def add_one(num: int):
    num = num + 1
    return num
from unittest import TestCase

from add_one import add_one


class TestAddOne(TestCase):

    def test_add_one(self):
        self.assertEqual(add_one(0), 1)
        self.assertNotEqual(add_one(0), 2)

и вот покрытие:

code coverage 33%

Как я могу проверить весь файл?

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Предполагая, что ваш тестовый файл называется test_one.py, запустите эту команду в том же каталоге:

coverage run  -m unittest test_one.py && coverage report

Результат должен выглядеть примерно так:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
Name          Stmts   Miss  Cover
---------------------------------
add_one.py        3      0   100%
test_one.py       6      0   100%
---------------------------------
TOTAL             9      0   100%

0 голосов
/ 24 октября 2019

Вы никогда не вызываете метод test_add_one.

Обратите внимание, как выполняется определение функции, но не тело. Чтобы запустить тест, добавьте проверку __main__ и TestSuite / TextTestRunner (https://docs.python.org/3/library/unittest.html)

from unittest import TestCase, TestSuite, TextTestRunner
from add_one import add_one


class TestAddOne(TestCase):

    def test_add_one(self):
        self.assertEqual(add_one(0), 1)
        self.assertNotEqual(add_one(0), 2)

if __name__ == "__main__":
    suite = TestSuite()
    suite.addTest(TestAddOne("test_add_one"))

    TextTestRunner().run(suite)

. Результат

coverage run <file.py>
coverage html
# OR
coverage report -m

- все проверенные строки.

...