Я использую библиотеку Google Mock в своих модульных тестах и пытаюсь выполнить пользовательскую проверку, которая может дать сбой.
Следующий пример демонстрирует, что я пытаюсь сделать:
struct Base
{
};
struct Derived : Base
{
int a;
};
struct MockClass
{
MOCK_METHOD1( Send, void ( Base & ) );
};
Теперь я хотел бы проверить, получил ли поддельный объект переданный объект типа Derived в методе Send и значение 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 ) );
Это сработает? Или есть лучший способ?