Open5
Pytest周りのあれこれ
ピン留めされたアイテム
このスクラップについて
プライベートでDjangoアプリを作っていますが、そこで得たPytest周りのノウハウをまとめるものです。
assertが失敗したときに詳細が出ない
pytestはASTの書き換えを行ってassertが失敗したときに詳細が出るようにしていますが、インポート先は書き換えません。register_assert_rewriteを使って、モジュールを登録してください。
@pytest.mark.django_db(transaction=True)
を付けているが、 Database access not allowed
と出る
おそらく、parametrizeの引数に、DBをアクセスするものがあるためです。
@pytest.mark.parametrize(
"instance, expected",
(PurchaseFactory(name="暴君ハバネロ"), "〜〜〜"),
)
def test_it(self, instance, expected):
...
ではなく、以下のようにするといいです。
@pytest.mark.paramtrize(
"params, expected",
(dict(name="暴君ハバネロ"), "〜〜〜"),
)
def test_it(self, params, expected):
instance = PurchaseFactory(**params)
...
skipとxfailの違い
- skipは「Windowsでは動かないテスト」のように、テストする意味がないもの
- xfailは「バグなどで落ちることが分かっていること」のように、テストする意味があるもの
警告を出したいとき
-
warningsを使う。
- pytestでサポートされている。Warnings Capture — pytest documentation