Gmock:返回无效值
Gmock: returning an invalid value
使用枚举class时函数的return值的奇怪行为,在此之前,使用了int并且测试成功。
enum class rvalue
{
ok = 0,
bad = 1,
other = 2,
};
class Speeder
{
public slots:
rvalue Run(int speed)
{
if (speed < 0)
return rvalue::bad;
else if (speed > 1000)
return rvalue::bad;
else if (speed > 1)
return rvalue::other;
return rvalue::ok;
}
};
class MockSpeeder : public Speeder
{
public:
MOCK_METHOD1(Run, rvalue(int speed));
};
TEST(Mytest, RunTest)
{
MockSpeeder mspeeder;
Speeder speeder;
EXPECT_CALL(mspeeder, Run(testing::_))
.Times(1);
auto a = mspeeder.Run(100); // The result is rvalue::ok. Why?
auto b = speeder.Run(100); // Result is rvalue::other.
EXPECT_TRUE(a == b);
}
结果,一个名为a的变量等于rvalue::ok,虽然代码显示这样的结果显然是不可能的。
除非另有说明,mock 将 return 默认值。
它不调用基础 class 实现。
使用枚举class时函数的return值的奇怪行为,在此之前,使用了int并且测试成功。
enum class rvalue
{
ok = 0,
bad = 1,
other = 2,
};
class Speeder
{
public slots:
rvalue Run(int speed)
{
if (speed < 0)
return rvalue::bad;
else if (speed > 1000)
return rvalue::bad;
else if (speed > 1)
return rvalue::other;
return rvalue::ok;
}
};
class MockSpeeder : public Speeder
{
public:
MOCK_METHOD1(Run, rvalue(int speed));
};
TEST(Mytest, RunTest)
{
MockSpeeder mspeeder;
Speeder speeder;
EXPECT_CALL(mspeeder, Run(testing::_))
.Times(1);
auto a = mspeeder.Run(100); // The result is rvalue::ok. Why?
auto b = speeder.Run(100); // Result is rvalue::other.
EXPECT_TRUE(a == b);
}
结果,一个名为a的变量等于rvalue::ok,虽然代码显示这样的结果显然是不可能的。
除非另有说明,mock 将 return 默认值。
它不调用基础 class 实现。