我在我的单元测试中使用谷歌模拟库,并且我正在尝试进行可能失败的自定义检查。
下一个示例演示了我正在尝试做的事情:
struct Base
{
};
struct Derived : Base
{
int a;
};
struct MockClass
{
MOCK_METHOD1( Send, void ( Base & ) );
};
现在我想检查假对象是否在 Send 方法中传递了 Derived 类型的对象,以及值 a。那么,该怎么做呢?
我的想法是使用 Invoke 并将调用转发到某个函数,该函数会将 dynamic_cast 从 Base 转换为 Derived,并检查值。如果类型不是预期的,则抛出异常。像这样 :
void TestCall( Base &obj )
{
Derived *realObj = dynamic_cast< Derived * >( &obj );
if ( NULL == realObj )
{
throw 123;
}
}
然后像这样测试:
MockClass mockObj;
EXPECT_CALL( mockObj, Send(_) )
.WillOnce( Invoke( &TestCall ) );
这行得通吗?或者,还有更好的方法?