4
콜백에 대한 포인터를 저장하는 클래스 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;
}
어떻게 SomeCallback()
있음 (상기의 경우 20)는 특정 매개 변수와 함께 호출 (구글 test로) 시험 할 수있다?
는 편집 :
나는 아주 추한 찾고 해결책을했다. 테스트가 통과되었지만 끝에 새로운 오류가 나타납니다 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
할 수 없습니다. Google 모의 인터페이스에는 클래스 인터페이스가 필요합니다. –