ENUMをASSERTでテストするときには型変換が必要。

Visual Studio 2015 でC++のネイティブライブラリーのユニットテストをしてみた。
しかし、つぎのように書いてもコンパイルできなかった。
#include "stdafx.h"
#include "CppUnitTest.h"
#include "Koma.h"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{
TEST_CLASS(UnitTest1)
{
public:

TEST_METHOD(TestMethod2)
{
Assert::AreEqual(FU, FU);
}

TEST_METHOD(TestMethod1)
{
Koma *koma = new Koma();
Assert::AreEqual(true, koma->IsGote(GFU));
Assert::AreEqual(false, koma->IsGote(SFU));
delete koma;
}

};
}

のようにすると
エラー C2338 Test writer must define specialization of ToString for your class . UnitTest1 c:\program files (x86)\microsoft visual studio 14.0\vc\unittest\include\cppunittestassert.h 66
エラー C3690 文字列リテラルが予期されるところで、代わりにユーザー定義の文字列リテラルが検出されました UnitTest1 c:\program files (x86)\microsoft visual studio 14.0\vc\unittest\include\cppunittestassert.h 66
と表示されてコンパイルできない。
FUはenumで定義している。

解決方法は
(int)FUとenumをint型にするとコンパイル可能になる。

Post a comment or leave a trackback: Trackback URL.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です