我有以下設置:我用PHPUnit嘲弄非抽象類,但不是所有的方法。因此,非模擬方法仍然存在,作爲對模擬中真實方法的調用。模擬類:方法暗示
問題是:如何提示這些方法是可用的(當然,有適當的簽名)?
我會詳細說明一下。類的示例:
class RealClass
{
public function callApi(Api $api) {}
public function doStuff(Foo $foo, Bar $bar) {}
}
現在我在測試做:
$mock->doStuff($foo, $bar);
:
/** @var \PHPUnit_Framework_MockObject_MockObject $mock */
$mock = $this->getMock('\RealClass', ['callApi']);
這將爲callApi()
只,但隨後如果在測試中我做創建模擬我的PHPStorm找不到明顯的方法,並認爲這是一個錯誤。我如何指出doStuff()
方法存在並需要正確的參數?
@method
似乎只能在類定義內工作。我試圖玩@see
,但無法解決此事。另外,理想的解決方案是允許在return語句中指定提示,因爲我可能想從測試助手方法返回模擬。
「便宜的作弊」是暗示與原來的類,但我不想做,因爲那樣我就會失去這一點 - 這是模擬的,哪些不是。這尤其重要,因爲我使用助手來構建注入mock的複雜實體。
但是再次 - 我無法區分它是否在某個地方是模擬的。這是非常重要的,因爲當我建立存根提供者時,我需要知道某一行 - 不管是否被嘲弄。現在我只是做了命名的區別(命名變量$ fooMock,$ barMock)。所以如果情況會如此 - 那麼我只會用原創課程暗示它,就是這樣。謝謝你的回答,+1無論如何 –
當使用這樣的模擬時,只有'callApi'方法被模擬出類,其他方法將從真實類中使用,所以你不會嘲笑整個類,只是該方法(因此應該總是知道你正在處理哪一個)。除非我誤解了,但也許最好另外打開一個問題,提供更多細節。 – Oldskool
是的,我知道。但想象一下這種情況 - 你需要區分某些'$ something'是否是模擬的。那個'$ something'是從我暗示'@return RealClass | MockObject'的幫助者返回的。現在 - 怎麼說,是不是模擬?是的,它將從兩者中組合方法,但實體本身的身份不明確。這就是我在答案中指出的 - 這就是我現在缺乏的。 –