鉴于此功能正在测试中,请参见:
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中的coverage视图显示被测函数的所有行均被命中,但在第3行(带有if
的行)中显示:
Line was hit
Line 2 didn't jump to line 4,6
在查看了多种情况后,我有一种印象,即覆盖率工具希望执行if
块,然后代码执行将继续在该块下面。但是,如果if
块包含必须被命中的return
语句,则不可能。
我会误解该消息吗?或者我需要配置其他任何信息以正确检测到该消息吗?
我的coverage.rc
中有branch = on
。但是只是禁用它会导致无法访问的分支不会被检测为“未命中”。
答案 0 :(得分:1)
我看不到相同的结果。当我运行它时,我得到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%
$