現在、ユニットテストの自動化をしようと思いコードを書いているところです。
あるコードを書いたところで
エラー C3690 文字列リテラルが予期されるところで~~
エラー C2338 Test writer must define specialization of ToString~~
といったエラーが発生しました。
解決策を調べたところこちらで
Assert::AreEqual(~~)を
Assert::AreEqual<int>(~~)
のように書くと直る、と書いてあり試してみたところ確かにエラーが消えました。
(Assert::AreEqualを他に使っている箇所で出なかったあたり複合的な要素が絡んだエラーなのでしょうが)
ここで疑問なのがこの<int>にはどういう役割や効果があるのか、という点です。
キャストでもなさそうですし・・・今まで関数名の後ろにつけるといった書き方をしたことがありません。
お分かりになる方がいらっしゃいましたら教えていただけると助かります。
追記
本題とは直接関係ないかと思いソースを省略しましたが記載しました。
環境はSaito Atsushiさんがおっしゃる通りVisual Studio 2015 for Windows DesktopでMicrosoft::VisualStudio::CppUnitTestFrameworkを使用しています。
C++
1class ClassA{ 2 public: 3 double dArray[RAW][COL]; 4 unsigned short usArray[RAW][COL]; 5 double dVal; 6 unsigned short usVal; 7 8 public: 9 Reset(); 10}; 11
C++
1namespace TestClassA{ 2 TEST_CLASS(TestClassAReset){ 3 public: 4 TEST_METHOD(Reset_dArray) 5 TEST_METHOD(Reset_usArray) 6 TEST_METHOD(Reset_dVal) 7 TEST_METHOD(Reset_usVal) 8 9 private: 10 template <typename T> void TestArrayReset(T* arr, int raw, int col); 11 template <typename T> void TestArrayMatch(T* arr, int raw, int col, T compVal); 12 template <typename T> void TestValReset(T val); 13 template <typename T> void TestValMatch(T val, T comVal); 14 15 private: 16 ClassA* m_cl; 17 }; 18}
C++
1void TestClassAReset::Reset_dArray(){ 2 m_cl = new ClassA(); 3 TestArrayReset(&m_cl->dArray[0][0], RAW, COL); 4 delete m_cl; 5} 6 7void TestClassAReset::Reset_dVal(){ 8 // new, delete省略 9 TestArrayVal(&m_cl->dVal); 10} 11// Reset_usArray, Reset_usValは引数にusArray, usValを使用すること以外は同様のため省略 12 13template <typename T> void TestClassAReset::TestArrayReset(T* arr, int raw, int col){ 14 // m_clの値を0以外で初期化 15 m_cl->Reset(); 16 TestArrayMatch(arr, raw, col, (T)0); 17} 18 19template <typename T> void TestClassAReset::TestArrayReset(T* arr, int raw, int col, T compVal){ 20 for(int i = 0; i < RAW; i++){ 21 for(int j = 0; j < COL; j++){ 22 Assert::AreEqual(comVal, arr[i*COL + j]); // エラーになる 23 } 24 } 25} 26 27template <typename T> void TestClassAReset::TestValReset(T val){ 28 // m_clの値を0以外で初期化 29 m_cl->Reset(); 30 TestValMatch(val, (T)0); 31} 32 33template <typename T> void TestClassAReset::TestValMath(T val, T compVal){ 34 Assert::AreEqual(comVal, val); // エラーにならない 35}
回答1件
あなたの回答
tips
プレビュー