2

我正在尝试遵循 David Sale 的Testing Python的第 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.pycalculate.py. 有什么办法可以禁用这种行为?

4

1 回答 1

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%
于 2017-10-28T12:03:59.970 回答