2016-07-03 4 views
2

私はVisual StudioにC++プロジェクトを持っています。それは1つのクラスを持っています、そして、私はそのクラスを単体テストしたいと思います。そのために、私は同じソリューションで別のコンソールアプリケーションプロジェクトを作成しました。このプロジェクトでは、メソッドと呼ばれるオブジェクトが作成され、それが返すものがアサートされました。ユニットテストフレームワークなしで私のクラスをユニットテストする方法 - ビジュアルスタジオセットアップ

私が抱えている唯一の問題は、テストしている元のプロジェクトのオブジェクトファイルまたは.libファイルがないため、リンカーが不平を言うことです。 libをエクスポートしてテストプロジェクトにリンクする方法は?または、自分自身のために.cppファイルをコンパイルするテストプロジェクトを言う良い方法がありますか?

アドバイスをしてください。

+0

なぜテストフレームワークを嫌うのですか? Googleのテストはかなり面白いです。また、IIRC Visual Studioには独自のものが付属しています。 –

+0

"テスト"プロジェクトの他のプロジェクトから実際のソースファイルを受け取ります。物理的にではなく、ディスクからのコピーのように、ワークスペースのソースツリーでドラッグアンドコピーするだけです。 –

+0

@JoachimPileborgこれは解決策だと思うが、私は思っていない? :) – Narek

答えて

1

単体テストは、テスト対象のアプリケーションとコンパイルまたはリンクする必要があります。

ユニットテストビジュアルスタジオプロジェクトとメインアプリケーションビジュアルスタジオプロジェクトを分離する場合は、メインスタジオスタジオプロジェクトのスタティックまたはダイナミックリンクライブラリを作成し、ユニットテストプロジェクトとリンクさせることができます。

+0

https://msdn.microsoft.com/en-us/library/hh598953.aspxこれは.dllを作成するためのもので、私の元のプロジェクトはそのまま動作し、 'main'関数を使ってエクスポートすることはできますか? DLL? – Narek

+0

ええ、あなたのクラス/メソッドをdllにエクスポートすることができます。あなたのアプリケーションがdllだけを作成しない限り、私は静的ライブラリを好むでしょう。ユニットテストでは、通常のコールフローではなくユニットテストを実際に呼び出すために、エントリポイント、つまりメイン関数を書き直す必要があります。 – P0W

1

テストプロジェクトでlibをエクスポートしてリンクするにはどうすればよいですか?または、自分自身のために.cppファイルをコンパイルするテストプロジェクトを言う良い方法がありますか?

単体テストのフレームワークを使用するかどうかという質問は、あなたのソリューションにアプリケーションコードを編成する最良の方法は何ですか。

テスト対象のものは、別々の静的または共有のライブラリプロジェクトで、異なる実行可能ファイルとリンクする必要があります。だから、簡単にだけでなく、このクラスのユニットテストを提供することができます

class Application { 
public: 
     Application(int argc, char* argv[]); 
     int run(); 
}; 

あなたの通常のアプリケーションは、次のように、int main(int argc, char* argv[])実行可能なエントリポイントから薄いデリゲートする必要があります。


ほとんどのテストフレームワークは、すでにすべてのテストケースを実行するためのmain()機能の適切な実装を提供する、またはあなた自身のコンソールアプリケーションを提供してassert()を使用しています。


これは、ビジュアルスタジオに限られた問題ではありませんが、IDEまたはビルドシステムに直面します。

関連する問題