是否可以使用(抽象)测试用例定义基本测试夹具并从中派生类?
我想支持两种方式(取自Roy Overshores“单元测试的艺术”):
我无法弄清楚这是如何与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
在某种程度上可以在测试基类中定义具体和纯虚拟测试吗?
答案 0 :(得分:1)
尝试将BaseClass.h中的TEST_F(BaseClass,T1){}移动到其自己的.cpp文件中。 BaseClass.h包含在DerivedClass1和DerivedClass2的2个.cpp文件中,在编译期间,TEST_F将扩展为一系列可执行函数,这些函数将包含在这两个.cpp文件中。这就是为什么链接器不满意并且抱怨符号重复的问题TestBody @ BaseClass_T1_Test @@ EAEXXZ。