我正在運行一個單元測試正在處理的使用生成器的Python項目的問題。簡化,項目/單元測試看起來像這樣:在不同單元測試中重用發生器
我有一個setUp()函數,它創建一個Person實例。 Person是一個具有生成器next_task()的類,它產生了Person所具有的下一個任務。
我現在有兩個單元測試,使用for循環測試發生器工作方式的不同事情。第一次測試完全符合我的預期,第二次測試甚至從未進入循環。在這兩個單元測試,代碼的第一行是:
for rank, task in enumerate(self.person.next_task()):
我的猜測是,這是行不通的,因爲是在兩個獨立的單元測試所使用的相同的發電機的功能。但這似乎並不像發電機組測試應該起作用的發電機的方式。我不應該在任務列表中迭代兩次嗎?另外,因爲Person實例是在setUp()中創建的,所以不應該每個單元測試都使用一個基本上不同的Person實例?
如果您自己運行第二項測試,那麼第二項測試是否可行?例如如果你在命令行中指定它。用'python testfile。py TestClass.testMethod' – 2010-09-24 16:19:41
這是* iterators *的工作方式:值不存儲在列表中。一旦你遍歷了迭代器一次,你就無法重新開始並重新執行。這聽起來像兩個測試正在測試'Person'的同一個實例;你可以通過讓它們打印'id(self.person)'來檢查它。 – katrielalex 2010-09-24 16:24:36
'Person.next_task()'方法是什麼樣的? 'setUp()'方法怎麼樣?從你的描述來看,這聽起來像兩個測試應該使用兩個獨立的'Person'實例,因爲你正在'setUp()'中創建它們。 – 2010-09-24 16:29:22