gmock 可以模拟未定义的方法吗?
Can gmock mock an undefined method?
我有一个测试对象,我想在真实对象中不需要的方法上调用 EXPECT_CALL
,是否可以模拟这种未定义的新方法?
struct MockObject {
MOCK_METHOD2(onRecv, void(void* buffer, size_t len));
};
MockObject
不继承任何其他 class。这是受支持的 gmock 用例吗?
据我所知,您在这里看到的是定义明确的行为。据我所知,所有 MOCK_METHOD
宏所做的就是连接方法原型和设置期望所需的其他元素。因此,虽然 MOCK_METHOD
系列宏主要用于开发需要测试的 类 派生的模拟 类,但您的实际用法本身对我来说看起来很正常。
虽然 google 模拟很整洁,但如果您发现有人在代码审查中抱怨这个,您可以轻松地编写自己的模拟方法,而无需付出太多努力。
struct MockObject {
void onRecv(void* buffer, size_t len) {
buf_ = buffer;
len_ = len;
onRecvCallCount_++;
}
void * buf_;
size_t len_;
int onRecvCallCount_ = 0;
};
// actual test setup being
void Setup() {
mockObject.onRecvCallCount_ = 0
}
// The rest of the assertions/expectations get wrapped inside the
// if (mockObject.onRecvCallCount_) { } block
因此 google 模拟宏通过提供像 MOCK_METHOD
这样的简单宏,节省了设置期望所需的所有这些额外连接。所以不要犹豫使用它。
我有一个测试对象,我想在真实对象中不需要的方法上调用 EXPECT_CALL
,是否可以模拟这种未定义的新方法?
struct MockObject {
MOCK_METHOD2(onRecv, void(void* buffer, size_t len));
};
MockObject
不继承任何其他 class。这是受支持的 gmock 用例吗?
据我所知,您在这里看到的是定义明确的行为。据我所知,所有 MOCK_METHOD
宏所做的就是连接方法原型和设置期望所需的其他元素。因此,虽然 MOCK_METHOD
系列宏主要用于开发需要测试的 类 派生的模拟 类,但您的实际用法本身对我来说看起来很正常。
虽然 google 模拟很整洁,但如果您发现有人在代码审查中抱怨这个,您可以轻松地编写自己的模拟方法,而无需付出太多努力。
struct MockObject {
void onRecv(void* buffer, size_t len) {
buf_ = buffer;
len_ = len;
onRecvCallCount_++;
}
void * buf_;
size_t len_;
int onRecvCallCount_ = 0;
};
// actual test setup being
void Setup() {
mockObject.onRecvCallCount_ = 0
}
// The rest of the assertions/expectations get wrapped inside the
// if (mockObject.onRecvCallCount_) { } block
因此 google 模拟宏通过提供像 MOCK_METHOD
这样的简单宏,节省了设置期望所需的所有这些额外连接。所以不要犹豫使用它。