模板类的GTest类型测试

时间:2019-11-27 17:54:46

标签: c++ googletest

我搜索了SE,答案似乎已经6岁以上了,这些解决方案不适用于 GTest的最新API,无论如何都是1.10.x。 我试图将自己的编译错误传播到最真实的程度,并且能够 找到众所周知的最小的,可复制的,无效的示例:

#include "gtest/gtest.h"
#include <memory>

template<class K, class V>
class Bar {
    virtual ~Bar()= default;
};

namespace {
template<typename T>
class MyFooTest: public testing::Test {
    std::unique_ptr<T> x;
    std::unique_ptr<Bar<int,char>> bar;
public:
    MyFooTest() {
        x= std::make_unique<T>();
        bar= std::make_unique<Bar<int,char>>();
    }
    ~MyFooTest() override { x= nullptr; };
};

template class MyFooTest<bool>;
template class MyFooTest<int>;

#if GTEST_HAS_TYPED_TEST_P

using testing::Types;

TYPED_TEST_SUITE_P(MyFooTest);

TYPED_TEST_P( MyFooTest, ConstructorDestructor) {
    ASSERT_EQ(42,42);
}

REGISTER_TYPED_TEST_SUITE_P(MyFooTest,ConstructorDestructor);

typedef ::testing::Types<MyFooTest<int>,MyFooTest<bool>> impls;
INSTANTIATE_TYPED_TEST_SUITE_P( impl_test, MyFooTest, impls);

#endif  // GTEST_HAS_TYPED_TEST_P
}

int main( int argc, char **argv ) {
    testing::InitGoogleTest(&argc,argv);
    return RUN_ALL_TESTS();
}

此代码无法编译,我知道我缺少有关虚拟构造函数/析构函数和模板的信息。但是,一年前,在以前的GTest发行版中,曾经有过类似的工作

0 个答案:

没有答案