のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

mstestで、TEST_CLASSを継承したいとき。

mstestで共通の関数をまとめたい。
継承がうまくできないな。

CppUnitTestFramework自体は、継承をサポートしていないようだ。

マクロ自体は、以下のようなので、多重継承できるみたい。

///////////////////////////////////////////////////////////////////////////////////////////
// Macro to define your test class. 
// Note that you can only define your test class at namespace scope,
// otherwise the compiler will raise an error.
#define TEST_CLASS(className) \

ONLY_USED_AT_NAMESPACE_SCOPE class 
className : public ::Microsoft::VisualStudio::
CppUnitTestFramework::TestClass<className>
parentClass.cpp

TEST_CLASS(ParentClass)
{
public:
    ParentClass();
    virtual ~ParentClass();
};
#include "parentClass.cpp"

TEST_CLASS(MyTestClass), public ParentClass
{
};

こうすると、VisualStudioがクラスとして認識する。
includeしないと、クラスとして認識してくれない。

C2385とC2594が出てしまう。
だめそうだ。

エラー	C2385	'__GetTestVersion' へのアクセスがあいまいです	
エラー	C2594	
'static_cast': 'void (__thiscall Tests_UnitTest::UT_Table::* )(void)' から 
'Microsoft::VisualStudio::CppUnitTestFramework::TestClassImpl::__voidFunc' への変換はあいまいです。	

TEST_CLASS(ParentClass)をやめて
class ParentClassにすると、C2385とC2594は消えた。

stackoverflow.com

Inheritance in MS unit test class