IDEA显示无法覆盖的分支(python)

问题描述 投票:0回答:1

鉴于此功能正在测试中,覆盖范围:

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。但只是禁用它会导致可到达的分支未被检测为“未命中”。

python intellij-idea code-coverage
1个回答
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%

$
© www.soinside.com 2019 - 2024. All rights reserved.