2

pytestxfailマークの範囲を狭めたいと思います。私が現在使用しているので、それはテスト機能全体をマークし、機能の失敗はクールです。

おそらく「withpytest.raises(module.Error)」のようなコンテキストマネージャを使用して、それをより小さなスコープに絞り込みたいと思います。例えば:

@pytest.mark.xfail
def test_12345():
    first_step()
    second_step()
    third_step()

私が呼び出す3つのメソッドのいずれかでアサートすると、このテストはxfailになります。代わりに、second_step()でアサートされ、他の場所ではアサートされない場合にのみ、テストをxfailにしたいと思います。このようなもの:

def test_12345():
    first_step()
    with pytest.something.xfail:
        second_step()
    third_step()

これはpy.testで可能ですか?

ありがとう。

4

1 に答える 1

3

次のように、それを実行するコンテキストマネージャーを自分で定義できます。

import pytest

class XFailContext:
    def __enter__(self):
        pass
    def __exit__(self, type, val, traceback):
        if type is not None:
            pytest.xfail(str(val))
xfail = XFailContext()

def step1():
    pass

def step2():
    0/0

def step3():
    pass

def test_hello():
    step1()
    with xfail:
        step2()
    step3()

もちろん、contextmanagerを変更して、特定の例外を探すこともできます。唯一の注意点は、「xpass」の結果、つまり、テスト(の一部)が予期せず合格した特別な結果を引き起こすことができないということです。

于 2012-07-26T06:31:14.277 に答える