Python的nose2 --with-coverage显示了测试本身的覆盖范围

时间:2016-11-07 16:56:05

标签: python nose2

我试图遵循David Sale {3}}的第3章,但使用nose2代替nosetests。到目前为止,我已经写了calculate.py

class Calculate(object):
    def add(self, x, y):
        if type(x) == int and type(y) == int:
            return x + y
        else:
            raise TypeError("Invalid type: {} and {}".format(type(x), type(y)))

if __name__ == '__main__':      # pragma: no cover
    calc = Calculate()
    result = calc.add(2, 2)
    print(result)

,在子目录test中,test_calculator.py

import unittest
from calculate import Calculate

class TestCalculate(unittest.TestCase):
    def setUp(self):
        self.calc = Calculate()

    def test_add_method_returns_correct_result(self):
        self.assertEqual(4, self.calc.add(2,2))

    def test_add_method_raises_typeerror_if_not_ints(self):
        self.assertRaises(TypeError, self.calc.add, "Hello", "World")


if __name__ == '__main__':
    unittest.main()

如果我在主目录中运行nose2 --with-coverage,我会

..
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK
----------- coverage: platform linux, python 3.5.2-final-0 -----------
Name                     Stmts   Miss  Cover
--------------------------------------------
calculate.py                 5      0   100%
test/test_calculate.py      11      1    91%
--------------------------------------------
TOTAL                       16      1    94%

我不明白为什么要为测试计划test/test_calculate.py以及主程序calculate.py计算保险范围。有没有办法禁用这种行为?

1 个答案:

答案 0 :(得分:0)

您可以使用--coverage参数仅测量给定路径的覆盖范围。在您的示例中,您需要运行

nose2 --with-coverage --coverage calculate

这将为您提供预期的输出:

..
----------------------------------------------------------------------
Ran 2 tests in 0.002s

OK
----------- coverage: platform linux, python 3.5.2-final-0 -----------
Name           Stmts   Miss  Cover
----------------------------------
calculate.py       5      0   100%