2

反復的に構築するオブジェクトがあります。すべてのステップをテストしたいと思います。そのための悪いテスト関数を次に示します。

def test_object:
    o = object.Object()
    o.step1()  # in place method
    assert(o.step1property)
    o.step2()  # in place method
    assert(o.step2property)
    o.step3()  # in place method
    # ...

そのため、すべてのステップの後に、必要なプロパティがオブジェクトに含まれているかどうかを確認します。次のように、yield キーワードを使用して、これをサブテストに分割できます。

def test_object:
    o = object.Object()
    yield o.step1
    assert(o.step1property)
    yield o.step2
    # ...

この時点で、これらの呼び出しを別々のテストに入れてみませんか?と疑問に思うかもしれません。前の結果の正しい出力が必要な場合は、それを .pickle ファイルに入れて独立させます。そして、私は一般的に同意します。ただし、あまり役に立たないユース ケースがあります。たとえば、step1() がクラスを初期化し、step2() が JSON エクスポートであるとします。次に、step1() で何かを変更した場合でも、JSON エクスポートが常に機能することを確認する必要があります。.pickle ファイルに依存するのは危険です。ファイルが古くなっている可能性があり、実際には最新のオブジェクトで失敗したときに JSON エクスポートが成功する可能性があるからです。アサーションを 2 つの個別のテストに分けてstep1()2 回 (1 回は独自のテストで、もう 1 回はテスト 2 のセットアップ メソッドで) 実行できますが、step1()非常に時間がかかります。

これを行うための好ましい方法は何ですか? yield 以外に「サブテスト」を呼び出す方法はありますか? それらのサブテストの戻り値を取得できますか? 私の場合、すべてのテスト結果を出力ディレクトリに保存しているので、JSON 文字列が欲しいです。文字列を関数に渡したいのですwrite_to_output_dir(これが悪い設計である場合は教えてください!)。

4

1 に答える 1