IDEA将无法访问的分支显示为未覆盖(Python)

时间:2018-07-10 09:38:14

标签: python intellij-idea code-coverage

鉴于此功能正在测试中,请参见:

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。但是只是禁用它会导致无法访问的分支不会被检测为“未命中”。

1 个答案:

答案 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%

$