У меня есть класс Foo
, который хранит указатель на обратный вызов. Обратный вызов может быть вызван методом InvokeCallback()
.Использование теста google для проверки обратных вызовов
void* SomeCallback(void* a) {
return (void*)(*(int*)a + 10);
}
class Foo {
public:
typedef void* (*CallbackFunction)(void*);
SetCallback(CallbackFunction callback) {
this->callback = callback;
}
InvokeCallback() {
callback(20);
}
private:
CallbackFunction callback;
}
Как можно проверить (с помощью теста Google), что SomeCallback()
был вызван с определенным параметром (20 в вышеупомянутом случае)?
EDIT:
я придумал очень уродливыми ищут решения. Тесты пройдены, но новая ошибка появилась в конце ERROR: 1 leaked mock object found at program exit
.
class MockCallbackClass {
public:
MOCK_METHOD1(SomeCallback, void*(void*));
};
MockCallbackClass mock; // Nasty global variable
void* __SomeOtherCallback(void* a) {
return mock.SomeCallback(a);
}
TEST(Callback, MockCallback) {
Foo foo;
foo.SetCallback(__SomeOtherCallback);
EXPECT_CALL(mock, SomeCallback((void*)10)).WillOnce(testing::Return((void*)20));
}
Возможные duplicate: http://stackoverflow.com/questions/8942330/google-mock-unit-testing-static-methods-c –
@ πάντα ῥεῖ, я проверил вопрос раньше и не понял, как применить ответ на случай автономных обратных вызовов функции. – Konstantin
Вы не можете. Для интерфейсов Mock M требуется интерфейс класса. –