我已经建立了我要进行单元测试的文件管理器(基本上是读/写)类。文件格式基本上属于第三方,对此我在构造函数中具有第三方函数调用。我通过包装方法调用了所有第三方调用 我的问题是这样的:在开始对类中的任何方法进行单元测试之前,我试图实例化看起来像这样的构造函数:
Filemanager::Filemanager{
if(wrapperfoo()){
file->open() //for writing
}
initialise();
}
现在我有一个模拟类MockManager来模拟Filemanager。当我尝试实例化MockManager时, 我需要模拟wrapperoo以返回true。但是,由于还没有实例化管理器本身,因此EXPECT_CALL失败。由于必须将EXPECT_CALL放置在新的MockManager()之前
MockManager *mgr;
EXPECT_CALL(*mgr, wrapperfoo()).Return(true) // Crashes here.. Obviously!!
mgr = new MockManager();
该如何处理?
答案 0 :(得分:0)
我看不到有任何可行的方法,您被迫建立一种解决方法。您已经自己给出了解释。
原则上,模拟并不是为您要实现的目的而设计的,它是为测试组件在API或接口上的行为而设计的,您可以在其中模拟组件的接口(API),反之亦然({ {3}},很好的解释)。在此示例中,您不会对内部调用(从构造函数)进行模拟,而是在另一个组件的测试用例中,该组件要求从wrapperfoo()
获取返回类型。