MockRepository
就编译器而言,Hippomocks支持多个实例。但是,某些用例是不可能的,因为它们会导致单元测试可执行文件崩溃。让我们考虑以下示例。
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
)。只允许一个实例的原因是什么? - 我可以理解,例如不同
ExpectCallFunc
的MockRepository
实例可能会相互矛盾。这是它背后的原因吗? - 我们可以通过将
mockRep1
实例化移到MySubTest()
调用之后来解决示例中的问题,但我们很难在一开始就理解这个问题。是否有编译时或运行时的可能性来明确识别这样的多个实例?