C++ 为什么在堆栈对象和堆对象上调用带有时间(n)的gmock EXPECT_调用时会得到不同的结果?

C++ 为什么在堆栈对象和堆对象上调用带有时间(n)的gmock EXPECT_调用时会得到不同的结果?,c++,googletest,googlemock,gmock,C++,Googletest,Googlemock,Gmock,我想在代码中使用带有时间(n)的gmock EXPECT_调用。我编写了一个示例测试,调用使用new关键字创建的对象时,得到了错误的结果。但它可以精确地处理堆栈对象因为我计划在实际测试中使用堆对象,所以我需要知道我在这里做错了什么。这是我的示例代码 #include <gmock/gmock.h> #include <gtest/gtest.h> class Point { private: int x; int y; public: Poin

我想在代码中使用带有时间(n)的gmock EXPECT_调用。我编写了一个示例测试,调用使用new关键字创建的对象时,得到了错误的结果。但它可以精确地处理堆栈对象
因为我计划在实际测试中使用堆对象,所以我需要知道我在这里做错了什么。
这是我的示例代码

#include <gmock/gmock.h>
#include <gtest/gtest.h>

class Point
{
private:
    int x;
    int y;

public:
    Point(int a, int b)
    {
        this->x = a;
        this->y = b;
    }

    virtual int getSum()
    {
        return x + y;
    }
};

class MockPoint :
        public Point
{
public:
    MockPoint(int a, int b):Point(a,b){}

    MOCK_METHOD0(getSum, int());
};

class PointTests :
        public ::testing::Test
{
};

TEST_F(PointTests, objectTest)
{
    MockPoint p(10, 20);
    EXPECT_CALL(p, getSum()).Times(10);
    p.getSum();
}

TEST_F(PointTests, pointerTest)
{
    MockPoint* p = new MockPoint(10,20);
    EXPECT_CALL(*p, getSum()).Times(10);
    p->getSum();
}

必须删除模拟点才能检查条件:

TEST_F(PointTests, pointerTest)
{
    MockPoint* p = new MockPoint(10,20);
    EXPECT_CALL(*p, getSum()).Times(10);
    p->getSum();
    **delete(p);**
}

您从未删除在堆上分配的模拟点,因此我假设它没有正确地报告结果。此外,该点缺少虚拟析构函数,而且似乎虚拟方法只是为了测试目的而添加的。谢谢。问题是没有删除heap对象。在添加虚拟析构函数并删除对象后,问题得以解决。谢谢你的帮助。
TEST_F(PointTests, pointerTest)
{
    MockPoint* p = new MockPoint(10,20);
    EXPECT_CALL(*p, getSum()).Times(10);
    p->getSum();
    **delete(p);**
}