2

特定の条件を満たすオブジェクトのリストを返すメソッドがあります

result = find_objects(some_criteria)
print("%r" % result)

>> [<my_object.my_object object at 0x85abbcc>]

find_objects()の動作を検証するためのpytestを作成したいと思います

def test_finder(testbed):
    result = testbed.find_objects(some_criteria)

    assert result is [<my_object.my_object object at 0x85abbcc>]

これまでのところ、pytestは左山括弧(<)を指しており、「SyntaxError」を宣言しています。

これを機能させても、将来、「my_object」を別の場所に保存すると失敗するのではないかと思っています。複数のインスタンスがある場合、それらの正しい数が報告されたことをどのように確認できますか?

このコンテキストでは、オブジェクトを返すメソッドの出力を検証するためのpythonicの方法は何ですか?

js

4

3 に答える 3

4

ご想像のとおり、問題は「is」比較をしようとしていることです。「is」は「まったく同じオブジェクト」を意味し、同一に見える 2 つのオブジェクトでさえ、このテストに失敗する可能性があります。

ここにあなたがテストしたいと思うかもしれないいくつかのことがあります

  • 例外は発生しませんでした
  • 返されたオブジェクトは正しい型でした

    assert isinstance(object, ResultClass)

  • 返されたオブジェクトにはいくつかの特定の属性があります

    assert result.attribute == attribute

そういうこと。確認する「受け入れられた」方法はないと思います。確認したいことがいくつかあるだけで、何を確認したいかを判断するのはあなた次第です。「is」を使用することは悪い考えであり、メモリ内の場所と比較することは悪い考えです。

于 2011-04-28T23:16:00.207 に答える
2

あなたが試すことができます:

assert isinstance(result, my_object.my_object)

文字列表現を比較することもできます(引用符がないことを除いて、基本的にはこれを実行しています)。isinstancedocs印刷ステートメントで何が起こっているかについては 、reprドキュメントを参照することもできます。山かっこは、オブジェクトのプラグインの代替ではないことを意味します。

于 2011-04-28T22:10:20.043 に答える
2

この線

assert result is [<my_object.my_object object at 0x85abbcc>]

実際にはPythonの構文エラーです:)

タイプと長さを確認したい場合は、次のようにすることができます。

assert len(result) == 1
for x in result:
    assert isinstance(result, my_object.my_object)
于 2011-04-29T11:35:27.603 に答える