是否可以使用googletest

时间:2015-07-23 07:10:17

标签: c++ unit-testing inheritance abstract-class googletest

是否可以使用(抽象)测试用例定义基本测试夹具并从中派生类?

我想支持两种方式(取自Roy Overshores“单元测试的艺术”):

  1. 模板测试类模式在基础测试夹具中定义抽象测试用例,从而强制派生类实现它们。
  2. 抽象测试驱动程序类模式在基类中实现所有派生类自动继承的测试
  3. 我无法弄清楚这是如何与googletest一起使用的。如果我有基类

    #pragma once
    
    class BaseClass : public ::testing::Test
    {
    };
    
    TEST_F(BaseClass, T1)
    {
    
    }
    

    和两个派生类(在不同的文件中)

    #include "stdafx.h"
    
    #include "BaseClass.h"
    
    class DerivedClass1 : public BaseClass
    {
    
    };
    

    #include "stdafx.h"
    
    #include "BaseClass.h"
    
    class DerivedClass2 : public BaseClass
    {
    
    };
    

    我收到编译错误

    virtual void __thiscall BaseClass_T1_Test::TestBody(void)" (?TestBody@BaseClass_T1_Test@@EAEXXZ) already defined in DerivedClass1.obj
    

    在某种程度上可以在测试基类中定义具体和纯虚拟测试吗?

1 个答案:

答案 0 :(得分:1)

尝试将BaseClass.h中的TEST_F(BaseClass,T1){}移动到其自己的.cpp文件中。 BaseClass.h包含在DerivedClass1和DerivedClass2的2个.cpp文件中,在编译期间,TEST_F将扩展为一系列可执行函数,这些函数将包含在这两个.cpp文件中。这就是为什么链接器不满意并且抱怨符号重复的问题TestBody @ BaseClass_T1_Test @@ EAEXXZ。