Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查在C+中的单元测试中在析构函数中调用的函数+;?_C++_Unit Testing_Mocking_Googletest_Googlemock - Fatal编程技术网

C++ 如何检查在C+中的单元测试中在析构函数中调用的函数+;?

C++ 如何检查在C+中的单元测试中在析构函数中调用的函数+;?,c++,unit-testing,mocking,googletest,googlemock,C++,Unit Testing,Mocking,Googletest,Googlemock,在下面的示例中,我想检查在销毁对象时是否调用了fooffunction #include <gtest/gtest.h> #include <gmock/gmock.h> class FooClass { public: ~FooClass(){ FooClass::fooFunction(); } virtual void fooFunction() {} }; class MockFooClass : public FooClass { publ

在下面的示例中,我想检查在销毁对象时是否调用了
fooffunction

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

class FooClass
{
public:

    ~FooClass(){ FooClass::fooFunction(); }
    virtual void fooFunction() {}
};

class MockFooClass : public FooClass
{
public:
    MOCK_METHOD0(fooFunction, void());
};

TEST(DumbTest, blabla)
{
    auto mock = new MockFooClass;
    EXPECT_CALL(*mock, fooFunction());
    delete mock;
}
#包括
#包括
班级
{
公众:
~FooClass(){FooClass::fooFunction();}
虚拟函数(){}
};
类MockFooClass:公共FooClass
{
公众:
MOCK_METHOD0(fooofunction,void());
};
测试(哑巴测试,布拉布拉)
{
自动模拟=新的模拟类;
EXPECT_调用(*mock,fooofunction());
删除模拟;
}
但是,此测试失败,因为
FooClass
的析构函数调用
FooClass::fooFunction()
而不是
MockFooClass::fooFunction()
。 有人知道这样做的方法吗

我正在使用VisualStudio2010

我理解这个测试失败的原因:只要我们进入
FooClass
的析构函数,对象就不再是
MockFooClass
。我要寻找的是,是否有人知道绕过它的方法。

您可以使用检查方法是否被调用

class FooClass
{
public:

    ~FooClass(){ FooClass::fooFunction(); }
    virtual void fooFunction() {}
};


TEST(DumbTest, blabla)
{
    auto real = new FooClass;
    auto mock = FAKE_ALL<FooClass>(FakeOptions::CallOriginal);
    delete real;
    ASSERT_WAS_CALLED(mock->fooFunction());
}
class类
{
公众:
~FooClass(){FooClass::fooFunction();}
虚拟函数(){}
};
测试(哑巴测试,布拉布拉)
{
auto real=新的FooClass;
auto mock=FAKE_ALL(FakeOptions::CallOriginal);
删除不动产;
调用了ASSERT_(mock->fooffunction());
}

我想您对何时调用析构函数感到困惑。当调用~FooClass时,它不再是@UKMonkey的mockfooclass可能的副本是的,这正是我的问题!我理解它失败的原因,我对此没有问题。我要寻找的是一种检查函数是否真正被调用的方法。也许这是个愚蠢的问题,C++中是不可能的。我只是想看看有没有办法。让你的mock方法设置一个变量并检查这个变量?但是它永远不会被调用,所以您实际上只是在为编译器编写一个单元测试