Unit testing 相当于Hippomocks';以前存在的MockRepository::ClassMock

Unit testing 相当于Hippomocks';以前存在的MockRepository::ClassMock,unit-testing,mocking,virtual,expectations,hippomocks,Unit Testing,Mocking,Virtual,Expectations,Hippomocks,在Hippomocks()的官方版本3.1中,曾经有一个MockRepository::ClassMock构造了模拟对象(与没有的MockRepository::InterfaceMock相反),它在处理非虚拟类方法时非常有用 当前版本的MockRepository::Mock做了我认为MockRepository::InterfaceMock做的事情。是否有可能用当前版本构造模拟对象 我不使用3.1版的理由:我需要同样非常有用的ExpectCallFunc来测试不属于后面介绍的类的函数 不使用

在Hippomocks()的官方版本3.1中,曾经有一个
MockRepository::ClassMock
构造了模拟对象(与没有的
MockRepository::InterfaceMock
相反),它在处理非虚拟类方法时非常有用

当前版本的
MockRepository::Mock
做了我认为
MockRepository::InterfaceMock
做的事情。是否有可能用当前版本构造模拟对象

我不使用3.1版的理由:我需要同样非常有用的ExpectCallFunc来测试不属于后面介绍的类的函数


不使用placement new的理由:placement new将在被Hippomock模仿后构建对象,从而“重置”之前由Hippomock更改的虚拟函数表。

不,没有。您现在可以模拟方法和成员,据我所知,这些方法和成员应该能够捕捉到您的类需要存在的所有情况。您可以使用
MockRepository::MemberMock(obj,&Class::iValue)
初始化成员


如果你真的需要
ClassMock
,最好先想想你为什么需要它;在干净的TDD中,这是不必要的,因此可能需要重构以避免这种情况。然后,您还可以将
ExpectCallFunc
作为后端口;它是一个相当独立的功能,因此应该具有合理的可移植性。如果您这样做了,请从Github获取当前的git版本,因为它已经验证了Linux/Windows/Mac X86和X86-64以及Raspbian/ARM上的C方法模拟。

当前的Hippomocks版本不包含任何
MemberMock
方法。它包含一个
MockRepository::Member
,其语法我无法破译,尤其是
模板无效成员(a*mck,C B:*Member)
中的模板参数
class B
。根据干净的TDD,我完全同意,但我使用的是第三方软件,短期内无法更改。啊。。。这种语法有点混乱。第一个参数是对象,第二个参数是成员的地址。A是您的类,C是成员的类,B是C的所有者的实际类(这可能不同于A,并以不同的方式指定,以确保我们可以转换指针以获得适当的基偏移)。您应该能够指定
成员(obj,&Class::iValue)来初始化它。在此之后,它被完全初始化并可用,因此您应该能够在之后分配给它。感谢您的澄清。我已经编辑了答案以反映您的提示,请交叉检查我的编辑。我最终未能初始化该成员,因为它无法从测试类访问。我将检查是否可以转发端口
ClassMock