我的系統中有很多實現PHP SPL Iterator接口的對象。是否有任何測試PHP SPL接口的開源SimpleTest測試用例
當我寫他們我也寫測試。
我知道,寫作測試通常不是一個切割'粘貼工作。但是,當涉及到實現標準PHP庫接口的測試類時,確實有一些腳本片段可以借用並放入Test類中 - 純粹是爲了測試該特定接口。
將這些公開提供似乎是明智的。所以,我想知道你是否知道?
我的系統中有很多實現PHP SPL Iterator接口的對象。是否有任何測試PHP SPL接口的開源SimpleTest測試用例
當我寫他們我也寫測試。
我知道,寫作測試通常不是一個切割'粘貼工作。但是,當涉及到實現標準PHP庫接口的測試類時,確實有一些腳本片段可以借用並放入Test類中 - 純粹是爲了測試該特定接口。
將這些公開提供似乎是明智的。所以,我想知道你是否知道?
一個快速和骯髒的伎倆嘲諷的迭代器就是去購買使用模仿對象的ArrayIterator並使用它作爲你的模擬迭代
$mockIt = new ArrayIterator;
$mockIt->append($mock1);
$mockIt->append($mock2);
$mockIt->append($mock3);
$sut = new SystemExpectingAnIterator($mockIt);
$this->assertTrue($sut->doSomethingWithIterator());
這是一個有點臭,但比嘲諷所有的SPL迭代器更簡單方法。
謝謝肯,這是一個有用的信息。然而,這更多的是測試一個*使用迭代器的對象,而不是測試一個實現迭代器接口的對象的方法。仍然非常方便 - 非常感謝。 – 2010-06-16 17:33:29
對不起JW,我誤解了你的問題。至於測試實現Iterator的對象,是不是一個簡單的foreach能做到這一點? – Ken 2010-06-17 07:50:48
沒有probs - 我總是很高興看到答案。關於'foreach'我不認爲這會給出真正的考驗。從內存來看,foreach將會在非迭代器兼容的變量上「工作」,因此循環內的任何測試都可能永遠無法到達。我設法測試了界面 - 所以它沒有太多的問題。但是,這似乎是以前很多人可能在那裏的情況,所以假設可能有一個現成的解決方案。 – 2010-06-18 12:56:44
更新。我發現[這篇文章](http://www.giorgiosironi.com/2009/09/practical-testing-in-php-part-2-write.html),雖然沒有回答這個問題,但它確實提供可以在一個可迭代對象上運行的幾種類型的測試。這是鼓舞人心的。 – 2013-07-02 19:57:39