在 Google Test(gtest)中,mockins
和 mocks
实际上并不是标准术语。通常,我们使用 mocks
来指代模拟对象(mock objects),而 mockins
可能是某种拼写错误或误解。
Mocks
Mocks 是指模拟对象,它们实现了与真实对象相同的接口,但允许你在运行时指定它们的行为和期望。使用模拟对象的主要目的是在测试中替换真实对象,以便控制和验证代码的行为。Google Mock(gMock)是一个用于创建和使用模拟对象的库。
使用 gMock 创建模拟对象
在 gMock 中,我们使用 MOCK_METHOD
宏来定义模拟方法,并使用 EXPECT_CALL
宏来设置期望。以下是一个简单的示例:
#include "gmock/gmock.h"
#include <gtest/gtest.h>
class MyInterface {
public:
virtual ~MyInterface() = default;
virtual int DoSomething(int value) = 0;
};
class MockMyInterface : public MyInterface {
public:
MOCK_METHOD(int, DoSomething, (int value), (override));
};
TEST(MyTest, Example) {
MockMyInterface mock;
EXPECT_CALL(mock, DoSomething(42))
.Times(1)
.WillOnce(testing::Return(100));
EXPECT_EQ(mock.DoSomething(42), 100);
}
在这个示例中:
MockMyInterface
类继承自MyInterface
并使用MOCK_METHOD
宏定义了一个模拟方法DoSomething
。- 在测试中,我们使用
EXPECT_CALL
宏设置了对DoSomething
方法的期望,指定它被调用一次并返回 100。
期望设置
.Times(cardinality)
:指定方法被调用的次数。.WillOnce(action)
:指定方法在第一次调用时执行的动作。.WillRepeatedly(action)
:指定方法在后续调用时执行的动作。
总结
在 gTest 中,mocks
是指模拟对象,用于在测试中替换真实对象并控制其行为。