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

2024-04-19 10:45:46 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑到此功能的测试覆盖范围:

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。但是仅仅禁用它将导致可到达的分支不能被检测为“未命中”。你知道吗


Tags: totestselfreturniffooparamis
1条回答
网友
1楼 · 发布于 2024-04-19 10:45:46

我看不到同样的结果。当我运行它时,我得到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%

$

相关问题 更多 >