-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
怎么取消指定MOCKER #29
Comments
你说的是 C 函数的mock [ 用 MOCKER(func) ] 还是 C++虚函数的mock [ 用 MOCK_METHOD(mocker, method) ]。 我还没详细去看怎么支持单个 mocker 的取消。 |
无论是C函数使用GlobalMockObject::reset();还是C++虚函数使用mock_class_instance.reset(),最终都会调用到 mockcpp/src/ChainableMockMethodContainer.cpp Lines 85 to 95 in 826f71b
而resetMethod可以删除特定的mock mockcpp/src/ChainableMockMethodContainer.cpp Lines 71 to 82 in 826f71b
是否可以将resetMethod通过某种方式暴露出来 |
嗯,大概是这个思路。但是要让使用者,可以方便的 reset 指定的mocker 才行。 所以我说 reset 指定的 mocker, 得先有个办法指定 mocker,然后reset 它。 |
老哥这个项目还在维护吗 关于reset这个。可否在一类关键字(stubs)后扩展一个reset? |
你说的 .stubs之后,可以.reset 吗? 可能达不到用完一个mocker就取消的效果哦。 有需求,可以在这个issue上+1。还可以在评论中写一下具体场景,为什么需要这个特性。 当然也欢迎提出方案,甚至实现这个特性。 |
我这边还有这个需求。 举个栗子: class Scenes_base : public testing::Test {
public:
Scenes_base(){};
~Scenes_base(){};
virtual void SetUp() override;
virtual void TearDown() override;
};
void Scenes_base::SetUp()
{
// do something
MOCKER(func1).stubs().will(invoke(fake_func1));
MOCKER(func2).stubs().will(returnValue(0));
}
void Scenes_base::TearDown()
{
GlobalMockObject::verify();
}
class Scenes_online : public Scenes_base {
public:
Scenes_online(){};
virtual ~Scenes_online(){};
virtual void SetUp() override;
virtual void TearDown() override;;
};
void Scenes_online::SetUp()
{
Scenes_base::SetUp();
// do something
}
void Scenes_online::TearDown()
{
Scenes_base::TearDown();
}
TEST_F(Scenes_online, return_1_offline_when_xxx)
{
MOCKER(recv_online_state).stubs().will(returnValue(false)).id("recv_online_state_return_false");
// do something
EXPECT_NE(get_online_state(), false);
MOCKER(recv_online_state).id("recv_online_state_return_false").reset(); //期望这里取消桩
}
TEST_F(Scenes_online, return_1_online_when_xxx)
{
MOCKER(recv_online_state).stubs().will(returnValue(true)).id("recv_online_state_return_true");
// do something
EXPECT_NE(get_online_state(), true);
MOCKER(recv_online_state).id("recv_online_state_return_true").reset(); //期望这里取消桩
} 实际的应用会比这个例子复杂。但是大致是这个意思,在Scenes_online的几个测试用例中,希望复用基础场景Scene_base构建的环境,测试不同的功能,每个测试可能会有MOCK,如上述两个测试用例 |
应用场景:
看了下实列我觉得取消的桩的方式略显复杂 TEST_F(Scenes_online, return_1_online_when_xxx)
{
MOCKER(recv_online_state).stubs().will(returnValue(true));
// do something
EXPECT_NE(get_online_state(), true);
MOCKER(recv_online_state).reset(); //期望这里取消桩
} |
GlobalMockObject::verify(); 或者GlobalMockObject::reset();可以取消所有的MOCKER,但是,如果我想保留一部分MOCKER,只取消另一部分MOCKER,需要怎么做?
The text was updated successfully, but these errors were encountered: