Pytest:在同一个测试函数中编写许多断言语句时,其中一些会失败,但如何知道哪个断言语句导致失败?

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

测试文件:

from RansomNote import Solution


def test_canConstruct():
    sol = Solution()
    assert sol.canConstruct('aa', 'aab') == True
    assert sol.canConstruct('xx','aaabc') == True
    assert sol.canConstruct('aab','ababa') == True

运行 pytest -v 后的输出:

==================================================================== short test summary info =====================================================================
FAILED Easy/test_ransomNote.py::test_canConstruct - AssertionError: assert False == True
======================================================================= 1 failed in 0.01s

问题: 首先,在同一个测试函数中可以有很多断言语句吗?还是不建议这样做? 在输出中它只是说断言错误,如何知道哪个断言语句实际上导致了失败? 为每个断言语句创建一个新的测试函数是否更好?

尝试过 pytest -v 预期哪个断言语句导致了失败。 输出结果: 失败 Easy/test_ransomNote.py::test_canConstruct - AssertionError:断言 False == True

python unit-testing testing pytest
2个回答
0
投票

Pytest 将打印断言后面的字符串,因此您可以这样做:

from RansomNote import Solution


def test_canConstruct():
    sol = Solution()
    assert sol.canConstruct('aa', 'aab') == True, 'first one failed'
    assert sol.canConstruct('xx','aaabc') == True, 'second one failed'
    assert sol.canConstruct('aab','ababa') == True, 'third one failed'

0
投票

您的输出中缺少某些内容。

如果我尝试使用此代码重现您的问题:

def working_function():
    return True


def failing_function():
    return False


def test_some_function():
    assert working_function()
    assert failing_function()

运行

pytest -v
清楚地显示哪个断言语句失败了:

================================================================= FAILURES ==================================================================
____________________________________________________________ test_some_function _____________________________________________________________

    def test_some_function():
        assert working_function()
>       assert failing_function()
E       assert False
E        +  where False = failing_function()

test_assert.py:11: AssertionError
========================================================== short test summary info ==========================================================
FAILED test_assert.py::test_some_function - assert False
============================================================= 1 failed in 0.01s =============================================================

另请注意:

assert working_function()

完全等同于:

assert working_function() == True

也就是说,没有理由在您的

== True
陈述中包含
asssert

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