我一直认为py.test中xfail / skip的命令式和声明性用法应该以相同的方式工作。与此同时,我注意到如果我编写一个包含命令性跳过的测试,测试结果将始终为“xfail”,即使测试通过也是如此。
以下是一些代码:
import pytest
def test_should_fail():
pytest.xfail("reason")
@pytest.mark.xfail(reason="reason")
def test_should_fail_2():
assert 1
运行这些测试将始终导致:
============================= test session starts ==============================
platform win32 -- Python 2.7.3 -- pytest-2.3.5 -- C:\Python27\python.exe
collecting ... collected 2 items
test_xfail.py:3: test_should_fail xfail
test_xfail.py:6: test_should_fail_2 XPASS
===================== 1 xfailed, 1 xpassed in 0.02 seconds =====================
如果我正确理解user manual中的内容,则两个测试都应该是“XPASS”。
这是py.test中的错误还是我出错?
答案 0 :(得分:1)
使用pytest.xfail()
辅助函数时,您实际上会在测试函数中引发异常。只有当你使用标记时,py.test才能完全执行测试并给你一个XPASS。