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 =====================
ユーザーマニュアルに書かれていることを正しく理解していれば、両方のテストを「XPASS」する必要があります。
これは py.test のバグですか、それとも何か問題がありますか?