2011-01-20 33 views
1

我有一個體育類的定義爲:Lambda函數簡化unittest?

Sport: 
- name 
- other fields 

我有一個測試,我想驗證添加運動「橄欖球」被包含在sport_objects的列表。

目前,該測試是脆性的,該指數在檢查對象的名字,我知道這是在:

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

我想改變這self.assertIn(),所以測試ISN」 t很脆弱,如果指數發生變化就不會受到影響(因爲我不關心這裏的訂單)。

有沒有辦法改變這種(使用lambda函數?)而不依賴於索引?

編輯:

給工大這兩個答案。我有多個斷言語句,所以我最終的解決方案是:

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

回答

2
self.assertIn('rugby', [sport_object.name for sport_object in sports_objects]) 
+0

謝謝!你是第一個。 – Cuga 2011-01-20 04:00:21

1

你總是可以做到:

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

或類似

import operator 
op = operator.attrgetter("name") 
self.assertIn('rugby', map(op, sport_objects))