测试文件:
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
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'
您的输出中缺少某些内容。
如果我尝试使用此代码重现您的问题:
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
。