是否可以使用 EXPECT_CALL 来验证模拟对象的构造函数是否在某些时候调用成员函数?

Can I use EXPECT_CALL to verify if the mock object's constructor calls a member function certain times?

本文关键字:是否 候调用 调用 函数 成员 构造函数 EXPECT 可以使 CALL 对象 模拟      更新时间:2023-10-16

>我有一个类,其构造函数调用成员函数,而成员函数又调用其他成员函数。我想使用 GMock 创建一个模拟类,并验证在构造模拟类对象时,这些成员函数在构造过程中只调用一次。但我观察到以下困境:

  • 一方面,根据GMock的虚拟文档,"Google Mock要求在调用模拟函数之前设置期望,否则行为是未定义的。因此,您必须在执行对象的构造函数之前调用 EXPECT_CALL((。

  • 另一方面,EXPECT_CALL(( 需要一个对象作为它的第一个参数,所以我们必须先构造这个对象,然后才能设置期望值。

上述观察是否正确,如果是,是否还有办法实现我希望做的事情?

听起来你最终会测试你班的模拟,但这不是很有帮助。默认情况下,模拟构造函数不会调用成员函数,因此您的EXPECT_CALL()需要与强制 Mock 进行这些函数调用配对。将代码的行为放入自动测试工具中不是有用的情况。

与其尝试测试类的实现细节,不如创建对象并在公共接口上使用EXPECT调用来验证构造函数是否已将对象置于正确的状态?