1

次のように定義された Sport クラスがあります。

Sport:
 - name
 - other fields

スポーツ「ラグビー」の追加がsport_objectsのリストに含まれていることを確認したいテストがあります。

現在、テストは脆く、私が知っているインデックスでオブジェクトの名前をチェックしています:

self.assertEquals('rugby', sports_objects[3].name)

これを self.assertIn() に変更したいので、テストはそれほど脆弱ではなく、インデックスが変更されても影響を受けません (ここでは順序を気にしないため)。

インデックスに依存せずに(ラムダ関数を使用して)これを変更する方法はありますか?

編集:

与えられた両方の答えはうまくいきます。複数の assert ステートメントがあるため、最終的な解決策は次のとおりです。

sports_names = [i.name for i in sports_objects]
self.assertIn('rugby', sports_names)
self.assertIn('baseball', sports_names)
4

2 に答える 2

2
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects])
于 2011-01-20T03:38:59.213 に答える
1

あなたはいつでもできる:

self.assertIn('rugby', (x.name for x in sports_objects))

または何かのような

import operator
op = operator.attrgetter("name")
self.assertIn('rugby', map(op, sport_objects))
于 2011-01-20T03:40:57.417 に答える