C++ 使用重复的操作序列简化GTest案例
我需要测试MyController是否使用不同的值重复调用一系列操作。下面是与此相关的代码,如何简化使用不同值调用相同操作的重复块C++ 使用重复的操作序列简化GTest案例,c++,googletest,C++,Googletest,我需要测试MyController是否使用不同的值重复调用一系列操作。下面是与此相关的代码,如何简化使用不同值调用相同操作的重复块 class MyControllerTest : public ::testing::Test { protected: MyControllerTest() : m_mycontroller(m_dataBroker, m_eventBroker) { } testing::MockDataBroker m_dat
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();
}
}
一个
for
循环就足够了
const vector items={Event::SP::ITEM_1,Event::SP::ITEM_2,…};
用于(常量自动和项目:项目){
EXPECT_CALL(m_dataBroker,Prepare());
EXPECT_调用(m_dataBroker,SetItem(数据::ID,SP::ITEM_1));
EXPECT_调用(m_dataBroker,End());
EXPECT_调用(m_eventBroker,DispatchEvent(Events::ADD,));
m_mycontroller.Event(Events::ADDED);
}
m_mycontroller.start();
EXPECT\u CALL
宏没有什么特别之处。它们只是对mock对象的函数调用m_-dataBroker
我尝试了这一点,但对于调用次数超过预期的每个EXPECT\u调用mock函数,我都会得到下面的错误-直接返回。函数调用:Prepare()预期:调用一次实际:调用两次-过度饱和和活跃您可能指的是EXPECT_调用(m_dataBroker,SetItem(Data::ID,item))代码>在您的示例中@Sirish只在循环中放入EXPECT\u CALL
语句,这些语句随项的不同而变化。
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();