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方法设置一个变量并检查这个变量?但是它永远不会被调用,所以您实际上只是在为编译器编写一个单元测试