鉴于此功能正在测试中,覆盖范围:
1 def func_to_test(param):
2
3 if param == 'foo':
4 return 'bar'
5
6 return param
而这两个单元测试:
def test_given_param_is_foo_it_returns_bar(self):
result = func_to_test('foo')
self.assertEquals(result, 'bar')
def test_given_param_is_not_foo_it_returns_the_param(self):
result = func_to_test('something else')
self.assertEquals(result, 'something else')
IDEA中的覆盖视图显示,所测试的函数的所有行在哪里被击中但在第3行(与if
的行)中显示:
Line was hit
Line 2 didn't jump to line 4,6
在查看多个这些情况之后,我有一个印象,即覆盖工具需要执行if
块,然后代码执行继续在块下面。但是,如果if
块包含必须被击中的return
语句,则这是不可能的。
我是否误解了该消息,还是还有其他任何必须配置才能正确检测到的消息?
在我的coverage.rc
我有branch = on
。但只是禁用它会导致可到达的分支未被检测为“未命中”。
我没有看到相同的结果。当我运行它时,我得到100%的语句和分支。也许你的代码有什么不同?
这是我的测试运行:
$ cat tryit.py
def func_to_test(param):
if param == 'foo':
return 'bar'
return param
import unittest
class TestIt(unittest.TestCase):
def test_given_param_is_foo_it_returns_bar(self):
result = func_to_test('foo')
self.assertEquals(result, 'bar')
def test_given_param_is_not_foo_it_returns_the_param(self):
result = func_to_test('something else')
self.assertEquals(result, 'something else')
$ coverage run --branch --source=. -m unittest tryit
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
$ coverage report -m
Name Stmts Miss Branch BrPart Cover Missing
------------------------------------------------------
tryit.py 12 0 2 0 100%
$