我的問題是。我有一個我想測試的課程(myClass)。在myClass中有一個函數,它也調用了myClass中的私有函數。告訴phpunit打電話給公衆而不是私人的
我知道我不能測試私人功能。是否有可能告訴phpunit調用另一個函數而不是私有的?
例
$this->testclass
現在我想測試
$this->testclass = new \stdClass();
$this->testclass->mock = $this->getMockBuilder('myClass')->getMock();
超出了我的測試用例我創建了一個假類的類。
$this->mockextended = new \stdClass();
$this->mockextended->mock = new MOCKEXTENDEDCLASSES();
在$this->mockextended
我有一個公共功能。
我想要的功能測試
public function TestMe(){
$this->somePrivateFunctioniHate(); <==== this is the pain in my ass
}
和私有函數
private function somePrivateFunctioniHate(){
//come code
}
我想要做的是什麼。函數TestMe正在調用一個私有函數。 是否有可能告訴phpunit覆蓋私人功能,並調用$this->mockextended;
內部的其他功能我已經嘗試過這樣。
$this->testclass->somePrivateFunctioniHate() = $this->mockextended->theWholeNewPrivateFunction()
只有這給了我一個很好的錯誤。我之前做過,並且工作。這樣稱呼它
編輯 對於不明白我的問題的人。 我有另一個調用另一個類的函數。我不想在我的測試中再添加一門課,所以我在測試用例外部創建了一個假類。插入與函數想要包含的類相同的功能。難道這樣嗎?
$this->testclass->chunks = new \stdClass();
//MOCKchunckTpl is the fake class outside my testcase
$this->testclass->chunks->config = new MOCKchunkTpl();
This works。每當一個功能想打電話$this->testclass->chunks->config->Somefunction();
它將被重定向到我的假類。
但是當我試圖做一個函數調用私人函數相同。像$this->testclass->somePrivateFunctioniHate() = $this->mockextended->theWholeNewPrivateFunction()
它給出了一個很好的錯誤
Fatal error: Can't use method return value in write context in
爲什麼在用你的模擬填充相同的變量之前,你總是實例化一個'new \ stdClass()'? – StoryTeller
我希望它使用它像$ object->其他對象 - > anotherobject-> thisonetoo ...... –
但是,您正在覆蓋變量立即。在這兩種情況下,'stdClass'會丟失,實例化沒有意義。那麼, – StoryTeller