我明白模擬和存根之間的區別。RhinoMock:Mocks VS StrictMocks VS DynamicMocks
但是RhinoMock框架中的不同類型的Mock讓我感到困惑。
有人能解釋一下Mocks VS StrictMocks VS DynamicMocks在RhinoMock框架方面的概念。
您的回答非常感謝。
我明白模擬和存根之間的區別。RhinoMock:Mocks VS StrictMocks VS DynamicMocks
但是RhinoMock框架中的不同類型的Mock讓我感到困惑。
有人能解釋一下Mocks VS StrictMocks VS DynamicMocks在RhinoMock框架方面的概念。
您的回答非常感謝。
嚴格的模擬是一個模擬,如果您嘗試使用任何未明確設置的方法來使用,它將引發異常。
如果嘗試使用未設置的方法,動態(或鬆散)模擬不會拋出異常,它將簡單地從方法返回缺省值
null
並繼續。
強烈建議使用動態模擬,因爲嚴格的模擬通常會成爲維護的噩夢。 Here's a good blog post,它有一個嚴格與動態的代碼示例,以及爲什麼嚴格的模仿通常是一個壞主意。
非常不贊同這一點。
可靠的測試驅動開發是不可能的使用動態模擬,因爲你正在測試不一定是你正在實施。
想象一下,你添加了一個foreach循環,你在循環內部做了一個db調用。這非常嚴重。如果您使用動態模擬來模擬您的依賴關係,您可能會錯過嘲笑數據庫調用,因此錯過了可伸縮性問題,因爲您不需要嚴格模擬每個數據庫調用。
public void myMethod()
{
externalMethod1.doSomething();
foreach()
{
externalDbCall.doSql();
}
}
public void testMyMethodWithDynamicMocksPassesAndMissesDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
public void testMyMethodWithStrictMocksFailsAndHighlightsDbCallInLoop()
{
expect(externalMethod1.doSomething();
}
你似乎不明白嘲笑的目的。當你嘲笑某事時,你明確地*不*測試那個特定的事情。如果你正在嘲笑DB代碼,那是因爲你沒有測試DB代碼。 – 2012-10-30 11:34:56
如果你試圖回答這個問題,你的答案會更好。 – Gevious 2012-10-30 11:50:07
@AndrewBarber我不同意格雷厄姆,但我認爲他的觀點是你應該關心*你怎麼稱呼嘲弄的對象,而不是模擬的東西。 – 2012-10-30 12:14:08
吹毛求疵 - >「返回null」應該是這樣的 – 2010-08-19 21:05:52
@Merlyn摩根 - 格雷厄姆「返回類型返回默認值」 - 偉大的一點:) – womp 2010-08-19 21:17:52
@Merlyn摩根 - 格雷厄姆:非常感謝傢伙爲閃電般的快速反應。非常感激。 – 2010-08-19 21:22:54