就編譯器而言,Hippomocks的MockRepository
支持多個實例。但是,有些用例是不可能的,因爲它們會導致單元測試可執行的崩潰。我們來考慮下面的例子。MockRepository可能存在多個共存實例嗎?如果是在哪些條件下?
void MyCall()
{
}
void MyCall2()
{
}
void MySubTest()
{
MockRepository mockRep2;
mockRep2.ExpectCallFunc(MyCall2);
MyCall2();
}
void MyTest()
{
MockRepository mockRep1;
mockRep1.ExpectCallFunc(MyCall);
MySubTest();
MyCall();
}
本示例(在Visual C++ 2010中)導致未處理的異常(訪問衝突讀取位置0x00000048)。
- 分析Hippomocks標題顯示此用例似乎並未預見(參見
MockRepoInstanceHolder
)。背後只允許一個實例的原因是什麼? - 我可以理解,例如
MockRepository
實例中的不同ExpectCallFunc
可能與實例矛盾。這是它背後的原因嗎? - 我們可以通過將
mockRep1
實例移至MySubTest()
調用之後解決問題,但我們很難第一時間理解問題。是否有編譯時或運行時可能性來明確識別這種多個實例?
感謝您的答案。我將其標記爲正確的答案,因爲我只是在索要背景信息而不是「bug」修復(這不過是一個設計決定而不是bug)。 – 2014-11-20 14:39:30