4
我有一個類Foo
存儲指向回調的指針。回調可以用方法InvokeCallback()
調用。使用谷歌測試檢查回調
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;
}
怎麼可能測試(使用谷歌測試),該SomeCallback()
物(在上述的情況下,20),具有特定的參數引用?
編輯:
我想出了一個非常難看的解決方案。測試通過,但新錯誤出現在末尾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));
}
可能重複:http://stackoverflow.com/questions/8942330/google-mock-unit-testing-static-methods-c –
@πάνταῥεῖ,我檢查了以前的問題,並沒有弄清楚如何將答案應用於獨立函數回調的情況。 – Konstantin
你不能。 Google Mock界面需要一個類界面。 –