我已經搜索,但無法完全找到我要查找的內容,而且手冊在這方面沒有太多幫助。我對單元測試相當陌生,所以不確定我是否在正確的軌道上。無論如何,在這個問題上。我有一個類:在PHP單元中創建模擬對象
<?php
class testClass {
public function doSomething($array_of_stuff) {
return AnotherClass::returnRandomElement($array_of_stuff);
}
}
?>
現在,顯然我希望AnotherClass::returnRandomElement($array_of_stuff);
每次都返回相同的事情。我的問題是,在我的單元測試中,我該如何模擬這個對象?
我已經嘗試將AnotherClass
添加到測試文件的頂部,但是當我想測試AnotherClass
時,出現「Can not redeclare class」錯誤。
我想我理解工廠類,但我不知道我將如何應用在這種情況下。我是否需要編寫一個完全獨立的AnotherClass類,其中包含測試數據,然後使用Factory類加載而不是真正的AnotherClass?或者是使用工廠模式只是一個紅色的鯡魚。
我嘗試這樣做:
$RedirectUtils_stub = $this->getMockForAbstractClass('RedirectUtils');
$o1 = new stdClass();
$o1->id = 2;
$o1->test_id = 2;
$o1->weight = 60;
$o1->data = "http://www.google.com/?ffdfd=fdfdfdfd?route=1";
$RedirectUtils_stub->expects($this->any())
->method('chooseRandomRoot')
->will($this->returnValue($o1));
$RedirectUtils_stub->expects($this->any())
->method('decodeQueryString')
->will($this->returnValue(array()));
在SETUP()函數,但這些存根被忽略,我不能工作了,是否是什麼我做錯了,或辦法,我訪問AnotherClass
方法。
幫助!這讓我瘋狂。
非常好,謝謝你的迴應。一個問題,但;所以,我有一個我的Factory類,它爲我創建了所有的實例。這是進入生產階段。我是否將模擬對象添加到此類中,還是將主要工廠類作爲生產添加,然後爲單元測試添加新的工廠類? – Mike 2009-08-13 07:45:55
這就是你的真實感。您可以創建一個新的工廠類進行測試,也可以確保在測試後清理了Factory類。 – 2009-08-13 14:55:06