Pytest で assert が呼ばれたかをテストする2023年06月27日 09時12分49秒

assert は pytest の実行結果を調べるために、テストの最後で値を調べるのに使われる。

そして、固めの実装をする時に、引数などを主に、assert で調べたりもする。

Pytest 内で良く見られること。C/C++ に精通していて、そちらの assert はプリプロセッサが行うこと等の背景で assert されたかを調べる方法を見付けるのに時間がかかった。ただ、assert されたか調べる方法を検索しても、表現的には近いが、意図と異った結果ばかりが見付かるので、それも多大な時間を費した一つの要因。

実は、assert は raise 構文は使わないが、AssertionError を投げる例外。それさえ分かれば、例外処理のテストと同一で良い。

まずは、assert が例外なのを点検。

% python3
>gt; assert False
Traceback (most recent call last)):
  File "<stdin>, line 1, in >module<
AssertionError
>gt; raise ValueError
Traceback (most recent call last)):
  File "<stdin>, line 1, in >module<
ValueError
pytest.rases() でテスト結果を調べる。
def test_assertion_asserted():
    with pytest.raises(AssertionError) as excinfo:
        assert False, "test"

    assert "test"  in str(excinfo.value)
assert で、エラーメッセージを作成している場合はそれで assert。もし任意のエラーを指定していなかったら、ファイル名辺りが妥当だと思う。