在GoogleMock中模拟文件写入过程

3
我刚开始使用GoogleMock为C++项目进行模拟。在我的情况下,我的待测试类观察一个写入文件的文件,并且每当写入了最小数量的新数据时,它就开始执行一些工作。
我需要的是用于模拟写入文件过程的模拟类。据我所知,我需要完全实现这个“写入文件”功能,形成(对于GoogleMock)一个虚类,从中派生出一个模拟类?最终使用模拟包装器进行测试和评估,对吗?
感谢您的帮助!

观察是如何进行的?您轮询文件还是在数据写入时通知您的类? - Corpus Gigantus
嗨。观察类观察文件大小。写入器是所讨论的对象。 - gilgamash
2个回答

2
在Google Mock中,Mocks是用于验证被测试代码对其执行某些操作的对象。
你所描述的不是一个Mock,而是一个触发被测试代码操作的实用类。
当你的类检测到它观察的文件被写入时,它会做什么?例如,如果它调用另一个对象,则可以使用Mock对象来检查是否以正确的参数调用它,例如新写入文件的数据块。

我的问题就是你所描述的:我必须实现你所称的util类的功能并在其上放置模拟器吗? - gilgamash
@gilgamash 两件事是独立的。您确实需要实现util类。是否需要模拟取决于当您的类检测到新数据已写入文件时要执行什么操作。 - Antonio Pérez

1
我假设您的“observer”类的对象被通知到“writer”类的对象已经写入了最小数量的数据。在这种情况下,您需要实现一个抽象类来表示“writer”类的接口,并让您的真实“writer”类从中继承并覆盖其虚拟函数。同时,让您的模拟“writer”类实现从该接口继承,并使用MOCK_METHODn创建模拟实现。
然后,使用指向抽象类的指针让您的“observer”类从“writer”对象接收通知。这样,您可以使用依赖注入在测试阶段切换实现,通过创建一个模拟“writer”对象并将其地址传递给“observer”对象(而不是一个真实“writer”对象的地址),并使用EXPECT_CALL设置测试用例模拟对象。
由于您没有提供详细的类描述,这是我能给出的最好建议。
编辑:
关于实现您的真正的“写作人”类:您不必立即创建它,您可以暂时使用模拟类来测试“观察者”类的行为,并将实现留到以后。当然,由于必须在生产代码中使用它,您最终必须实现它。

您好,感谢回复。正如您所猜测的那样,观察类已被通知。我希望模拟文件写入过程。您描述的基本上就是我理解我必须要做的——主要关注点是我的派生写入器类是否必须实现对文件的写入,而Mock类仅用于测试/评估目的。 - gilgamash
抱歉,我不是很清楚问题的重点在哪里。请检查我的更新答案。希望能帮到你! - Marko Popovic
非常感谢您的帮助!现在事情变得清晰了。无论我如何进行,我都需要以某种方式模拟“文件大小的最小更改量”,以获得真实的测试。 - gilgamash
是的,使用模拟是最好的方法,因为它可以隔离您与环境(您实际上并没有写入某个文件)。顺便说一下,不用谢!如果有帮助,请考虑将答案标记为已接受。 - Marko Popovic
但是在这种情况下,我不需要更改观察者以不处理真实文件而是“读取模拟器”吗? - gilgamash
这就是依赖注入的作用。观察者持有指向接口的指针,这意味着它可以接收真实类或模拟类的对象。通常通过将接口指针类型的参数添加到观察者类的构造函数中来实现。这样,您在构造观察者对象时可以选择要使用哪个“写入器”实现。在生产代码中,您创建一个真正的写入器并将其地址传递给观察者构造函数。在测试代码中,您创建一个模拟对象并将其地址传递给构造函数。 - Marko Popovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接