您如何在测试 gmock 下模拟属于 class 一部分的函数?
How do you mock a function that is part of that class under test gmock?
我正在使用 googletest / googlemock (GTest/GMock)。
我只能在 Selection
自然 return 为假时测试下面的代码。
我将如何模拟下面的示例问题?
我很难更改选择的 return 值,因为它使用的是真实代码。
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();
}
传统单元测试具有 A3 形式:
- Assemble(也称为 "Arrange";设置您的测试对象)
- Act(对对象执行所需的操作)
- Assert(验证正确的值已更改、事件已发出等)
这是一种有效的测试形式,根本不需要模拟框架。
在模拟测试中,您可能(取决于模拟库的工作方式)必须将此过程修改为 A4:
- Assemble(包括注入模拟依赖项)
- Anticipate(通过识别预期调用、设置 return 值、副作用等来设置对模拟依赖项的预期)
- 行动
- 断言(如果模拟期望涵盖所有内容,可能没有其他断言)。
就你而言,不清楚你在嘲笑什么。您要替换为模拟的 dependencies you are injecting 在哪里?
根据您向我们展示的代码,我认为您应该使用 A3 测试模式。这意味着在 "Assemble" 部分中,您通过设置选择来配置对象,然后对其执行操作并检查结果。
如果您不能在 A3 模式下工作,这可能意味着您需要重构以更好地分离依赖项。当您这样做时,您可以使用 A4 模式进行模拟和测试。
我正在使用 googletest / googlemock (GTest/GMock)。
我只能在 Selection
自然 return 为假时测试下面的代码。
我将如何模拟下面的示例问题?
我很难更改选择的 return 值,因为它使用的是真实代码。
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();
}
传统单元测试具有 A3 形式:
- Assemble(也称为 "Arrange";设置您的测试对象)
- Act(对对象执行所需的操作)
- Assert(验证正确的值已更改、事件已发出等)
这是一种有效的测试形式,根本不需要模拟框架。
在模拟测试中,您可能(取决于模拟库的工作方式)必须将此过程修改为 A4:
- Assemble(包括注入模拟依赖项)
- Anticipate(通过识别预期调用、设置 return 值、副作用等来设置对模拟依赖项的预期)
- 行动
- 断言(如果模拟期望涵盖所有内容,可能没有其他断言)。
就你而言,不清楚你在嘲笑什么。您要替换为模拟的 dependencies you are injecting 在哪里?
根据您向我们展示的代码,我认为您应该使用 A3 测试模式。这意味着在 "Assemble" 部分中,您通过设置选择来配置对象,然后对其执行操作并检查结果。
如果您不能在 A3 模式下工作,这可能意味着您需要重构以更好地分离依赖项。当您这样做时,您可以使用 A4 模式进行模拟和测试。