我知道我問這個問題意味着我可能完全不懂嘲笑。我知道爲什麼使用模擬(隔離),我知道如何使用模擬(每個FW和它的方式) - 但我不明白 - 如果嘲笑的目的是爲了返回預期值隔離我的單元測試,爲什麼應該我嘲笑一個對象,而不僅僅是自己創造價值?模擬對象和設置一個值有什麼區別
爲什麼這樣的:
$searchEngine = Mockery::mock('elasticSearch');
$searchEngine->shouldReceive('setupDataConnection')->once()->andReturn("data connected");
$insertData = new DataInserter;
$this->assertEquals("data connected",$insertData->insertData($searchEngine));
而不是這個:
$knownResult = "data connected";
$insertData = new DataInserter;
$this->assertEquals($insertData->insertData($searchEngine) ,$knownResult);
編輯 很抱歉的錯誤,但意外地不包括insertData在第二個例子。
謝謝你的回覆,你能給我一些真實生活的例子,我可能需要在不使用模擬的情況下測試對象之間進行交互嗎? – cmvr 2015-03-02 10:39:11
@cmvr我編輯了這篇文章,提供了6個立即想到的例子。 – 2015-03-02 11:07:15
我很抱歉,但我不知道我明白。如果嘲笑我可以使用(例如)實際上並沒有連接到DB的類(或者甚至可能不存在) - 這是如何幫助我驗證我的查詢是正確的?另外,如果嘲笑的地方是隔離,爲什麼我想在無關的單元測試中測試我的查詢?感謝您花時間來解釋和詳細解答。 – cmvr 2015-03-02 12:51:38