我需要测试MyController是否以不同的值重复调用一系列操作。下面是与之相关的代码,如何简化以不同值调用相同操作的重复块?
class MyControllerTest : public ::testing::Test
{
protected:
MyControllerTest() :
m_mycontroller(m_dataBroker, m_eventBroker)
{
}
testing::MockDataBroker m_dataBroker;
testing::MockEventBroker m_eventBroker;
MyController m_mycontroller;
};
TEST_F(MyControllerTest, ConfigureSequence)
{
{
InSequence dummy;
EXPECT_CALL(m_dataBroker, Prepare());
EXPECT_CALL(m_dataBroker, SetItem(Data::ID, SP::ITEM_1));
EXPECT_CALL(m_dataBroker, End());
EXPECT_CALL(m_eventBroker, DispatchEvent(Events::ADD, _));
m_mycontroller.Event(Events::ADDED);
EXPECT_CALL(m_dataBroker, Prepare());
EXPECT_CALL(m_dataBroker, SetItem(Data::ID, SP::ITEM_2));
EXPECT_CALL(m_dataBroker, End());
EXPECT_CALL(m_eventBroker, DispatchEvent(Events::ADD, _));
m_mycontroller.Event(Events::ADDED);
EXPECT_CALL(m_dataBroker, Prepare());
EXPECT_CALL(m_dataBroker, SetItem(Data::ID, Event::SP::ITEM_3));
EXPECT_CALL(m_dataBroker, End());
EXPECT_CALL(m_eventBroker, DispatchEvent(Events::ADD, _));
m_mycontroller.Event(Events::ADDED);
EXPECT_CALL(m_dataBroker, Prepare());
EXPECT_CALL(m_dataBroker, SetItem(Data::ID, Event::SP::ITEM_4));
EXPECT_CALL(m_dataBroker, End());
EXPECT_CALL(m_eventBroker, DispatchEvent(Events::ADD, _));
m_mycontroller.Event(Events::ADDED);
EXPECT_CALL(m_dataBroker, Prepare());
EXPECT_CALL(m_dataBroker, SetItem(Data::ID, Event::SP::ITEM_5));
EXPECT_CALL(m_dataBroker, End());
EXPECT_CALL(m_eventBroker, DispatchEvent(Events::ADD, _));
m_mycontroller.Event(Events::ADDED);
m_mycontroller.start();
}
}
答案 0 :(得分:1)
for
循环就足够了
const vector<...> items = {Event::SP::ITEM_1, Event::SP::ITEM_2, ...}; for (const auto& item : items) { EXPECT_CALL(m_dataBroker, Prepare()); EXPECT_CALL(m_dataBroker, SetItem(Data::ID, SP::ITEM_1)); EXPECT_CALL(m_dataBroker, End()); EXPECT_CALL(m_eventBroker, DispatchEvent(Events::ADD, _)); m_mycontroller.Event(Events::ADDED); } m_mycontroller.start();
EXPECT_CALL
宏没有什么特别之处。它们只是模拟对象m_dataBroker
上的函数调用。