前提・実現したいこと
現在、C++のコードにおいて単体テストについて学習しています。
任意のクラスのメンバー関数を対象としてテストコードを作成したのですが、ビルド時にリンクエラーが発生します。
- テストコードでは、対象としているクラスのヘッダーファイルをインクルードしてます。
- 対象としてるクラスはヘッダーとソースは別のファイルにしてます。
- 2のヘッダーとソースを1つのファイルとした時、この問題は起きません。
- テストコードで対象としているクラスのヘッダーとソースファイルをインクルードするとこの問題は起きません。
- メイン関数(対象のクラスを宣言、定義しているプロジェクトのメイン関数)からではリンクエラーは発生しません。
これらから、テストコードのプロジェクトから別のプロジェクトの.cpp を見れてないように思うのですが
見れるようにするにはどの様にするのでしょうか?
発生している問題・エラーメッセージ
LNK2019 未解決の外部シンボル "public: int __thiscall TEST_SUM::Sum::sum(void)" が関数 "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" で参照されました LNK2019 未解決の外部シンボル "public: void __thiscall TEST_SUM::Sum::setA(int)" が関数 "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" で参照されました LNK2019 未解決の外部シンボル "public: void __thiscall TEST_SUM::Sum::setB(int)" が関数 "public: void __thiscall UnitTest1::UnitTest1::TestMethod1(void)" で参照されました
該当のソースコード
単体テスト対象のクラス(ヘッダー)
C++
1#pragma once 2namespace TEST_SUM 3{ 4 class Sum 5 { 6 private: 7 int a; 8 int b; 9 10 public: 11 void setA(int a); 12 void setB(int b); 13 14 int sum(); 15 16 Sum() 17 { 18 this->a = 0; 19 this->b = 0; 20 }; 21 }; 22} 23 24
単体テスト対象のクラス(ソース)
C++
1#include "Sum.h" 2void TEST_SUM::Sum::setA(int a) 3{ 4 this->a = a; 5} 6void TEST_SUM::Sum::setB(int b) 7{ 8 this->b = b; 9} 10int TEST_SUM::Sum::sum() 11{ 12 return this->a + this->b; 13}
テストコード
C++
1#include "pch.h" 2#include "CppUnitTest.h" 3#include "../Stady_TEST2/Sum.h" 4//#include "../Stady_TEST2/Sum.cpp" 5 6using namespace Microsoft::VisualStudio::CppUnitTestFramework; 7 8namespace UnitTest1 9{ 10 TEST_CLASS(UnitTest1) 11 { 12 public: 13 TEST_METHOD(TestMethod1) 14 { 15 TEST_SUM::Sum ABC; 16 ABC.setA(10); 17 ABC.setB(10); 18 19 Assert::AreEqual(20, ABC.sum()); 20 } 21 }; 22}
補足情報(FW/ツールのバージョンなど)
Visual Studio 2019
Microsoft CppUnitTestフレームワークを使用
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/05 00:53