有没有办法将向量引用中的数据存储到 MOCK_METHOD?
我有以下模拟界面:
MOCK_METHOD(bool, SetData, (const std::vector<uint8_t>& data), (override));
我想测试发送到这个模拟方法的数据,例如。
std::vector<uint8_t> test_data;
EXPECT_CALL(testClass, SetData(_)).SaveArg<0>(&test_data);
EXPECT_EQ(test_data[0], 42);
可以做到,见下文。但请注意,匹配器,即使是更复杂的匹配器,通常也被认为是更干净的解决方案。
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <vector>
using namespace testing;
struct I
{
virtual bool setData(const std::vector<std::uint8_t>&) = 0;
virtual ~I() = default;
};
struct S : I
{
MOCK_METHOD(bool, setData, (const std::vector<uint8_t>& data), (override));
};
TEST(aaa, bbb)
{
S s;
std::vector<std::uint8_t> target;
std::vector<std::uint8_t> source{1,2,3,4,5};
EXPECT_CALL(s, setData).WillOnce(
DoAll(
SaveArg<0>(&target),
Return(true)
)
);
s.setData(source);
EXPECT_EQ(source, target);
}
您根本不必保存参数。只需使用匹配器来检查内容是否符合您的期望:
TEST(X, Y)
{
std::vector<uint8_t> expectedData {42, 1, 2, 3};
// if not matcher is specified explicitly, `::testing::Eq` is used
EXPECT_CALL(testClass, SetData(expectedData)).WillOnce(::testing::Return(true));
}