我正在尝试测试一个方法,该方法将对象作为其输入参数,并调用一个返回数组getArray()
的方法。我想使用 Google Mock 来模拟这个对象,并告诉它在调用时返回一个特定的数组。否则,我依赖于对象类的实现是正确的。
我已经模仿了要传递给测试方法的对象,如下所示:
class MockInputClass : public InputClass {
public:
MOCK_CONST_METHOD0(getArray, std::array<uint8_t, 4>());
};
我的测试如下:
TEST(ClassUnderTest, methodToTest_DoesWhatIWant) {
MockInputClass mock;
EXPECT_CALL(mock, getArray())
.WillRepeatedly(
Return(std::array<uint8_t, 4>({1, 2, 3, 4}))
);
std::cout << "Called in test: " << mock.getArray()[0] << std::endl;
ClassUnderTest obj;
obj.methodToTest(mock);
}
在我的classundertest.h
中,我已定义methodToTest
,如此:
auto methodToTest(InputClass &input) -> void {
std::cout << "Called in class under test: " << input.getArray()[0] << std::endl;
}
如果我运行测试,则输出为:
Called in test: 1
Called in class under test: 0
出于某种原因,一旦我将我的模拟对象传递给正在测试的类,它似乎不再返回我告诉它的内容。我做错了什么?