gpt4 book ai didi

c++ - 期望以确切的对象实例作为参数调用

转载 作者:行者123 更新时间:2023-11-28 04:23:14 25 4
gpt4 key购买 nike

class MyClass
{
public:
int state;
};

class SomeClass
{
virtual MyClass myFunction1() = 0;
virtual void myFunction2(MyClass) = 0;
};

class MyMock : public SomeClass
{
public:
MOCK_METHOD0(myFunction1, MyClass());
MOCK_METHOD1(myFunction2, void(MyClass));
};

TEST_F(/* ... */)
{
MyMock myMock;
MyClass myObject;
EXPECT_CALL(myMock, myFunction1()).WillOnce(Return(myObject));
EXPECT_CALL(myMock, myFunction2(myObject));
}

当我编写这段代码时,我以为我正在测试 myFunction2 是否使用了由 myFunction1 返回的 MyClass 的确切实例。但是这段代码也通过了:

TEST_F(/* ... */)
{
MyMock myMock;
MyClass myObject1;
MyClass myObject2;
EXPECT_CALL(myMock, myFunction1()).WillOnce(Return(myObject1));
EXPECT_CALL(myMock, myFunction2(myObject2));
}

显然,第二个 EXPECT_CALL() 只检查 myFunction2 是否使用与 具有相同值的任何 MyClass 对象调用myObject2 而不是如果它是同一个实例,这也可能是一个有效的测试,但它测试了不同的(更一般的?)行为。

如何判断是不是同一个实例?

最佳答案

根据我之前的评论回答:你的函数不使用引用/指针,而是使用一个拷贝(因此不可能比较两个拷贝的地址)。 myFunction1myFunction2 都必须使用引用/指针才能进行比较。以下示例测试您的初始设置。

class SomeClass
{
virtual MyClass* myFunction1() = 0; // pointer!
virtual void myFunction2(MyClass*) = 0; // pointer!
};

TEST_F(/* ... */)
{
MyMock myMock;
MyClass myObject;
EXPECT_CALL(myMock, myFunction1()).WillOnce(Return(&myObject)); // dereference!
EXPECT_CALL(myMock, myFunction2(&myObject)); // dereference!
}

关于c++ - 期望以确切的对象实例作为参数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54981605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com