您如何模拟一个正在测试GMOCK的函数
How do you mock a function that is part of that class under test gmock?
我正在使用googletest/googlemock(gtest/gmock)。当Selection
自然返回false时,我只能测试下面的代码。我将如何模拟下面的示例问题?
我很难更改选择的返回值,因为它使用了真实代码。
class frame
{
bool Selection();
void Actions();
};
void frame::Action()
{
if (Selection())
{
// do something
}
else
{
// do something else
}
}
void WrapAction()
{
Frame->Action();
}
TEST_F(UITest, ActionWithSelectionTrue)
{
EXPECT_CALL(*Frame, Selection()).WillOnce(Return(true));
WrapAction();
}
TEST_F(UITest, ActionWithSelectionFalse)
{
EXPECT_CALL(*Frame, Selection()).WillOnce(Return(false));
WrapAction();
}
传统单元测试的 a 3 表格:
- 组装(也称为"安排";在测试中设置对象)
- ACT (对象对所需的操作执行所需的动作)
- sustert (验证正确的值更改,事件已发出等) )
这是测试的有效形式,根本不需要模拟框架。
在与模拟的测试中,您可以(取决于模拟库的工作方式)必须修改此过程为 a 4 :
- 召集(包括注入模拟的依赖项)
- 预期(通过识别预期的呼叫,设置返回值,副作用等来设置模拟依赖关系的期望) )
- ACT
- 断言(如果模拟期望涵盖一切,可能没有别的断言)。
就您而言,尚不清楚您在嘲笑什么。您要注射的依赖项在哪里取代模拟?
给定您向我们展示的代码,我认为您应该使用 a 3 测试模式。这意味着在"组装"部分中,您可以通过设置选择来配置对象,然后对其执行操作并检查结果。
如果您无法在 a 3 模式中工作,这可能意味着您需要重构以更好地分开依赖关系。当您这样做时,您可以使用 a 4 模式进行模拟和测试。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- gmock / google-mock发出警告,并且通过模拟异常未通过测试
- C++ gmock - 我们如何在单元测试 cpp 文件中读取/获取 cpp 文件函数的参数值
- 在类 gtest/gmock 进行单元测试时模拟成员函数C++
- 使用 C++ GMock 匹配器测试unordered_map的密钥是否来自一组密钥
- gmock EXPECT_CALL 不会在测试类中调用该方法
- 您如何模拟一个正在测试GMOCK的函数
- GMock 测试夹具在 Windows 上崩溃
- 如何使用gmock框架模拟c++单元测试中的fork和execlp系统调用
- 使用GTEST和GMOCK进行测试:共享与静态库
- gmock - 测试模拟方法参数
- QTestLib 单元测试框架 + Gmock (Create QTCPServer语言 - Mock Object).
- 使用gmock测试依赖于QApplication的函数
- 如何使用 gmock 来测试类是否调用其基类的方法
- '(maybe you meant to use ‘->’ ?)' 在 gmock 测试中