1

C ++でいくつかの簡単なテストを行う必要があります(これまでに行ったことはありません)。Visual Studio 2010で作業していて、組み込みのテストタブに出くわしました。しかし、私はそれが本当に好きではなかったし、それは私にはかなり複雑に思えます。

必要なのはカスタムmain()メソッドだけなので、クイックコンソールアプリを起動して、クラスが正常に機能するかどうかを確認できます。

プログラムの主要な開始点となるラッパーランチャーファイルを作成することにより、プリプロセッサ定義でこれを克服することにしました。

したがって、私のmain.cppファイルには次のものが含まれています。

#define DESIRED_TEST "some_test.cpp"

#ifndef DESIRED_TEST
#include "main_program.cpp"
#else
#include DESIRED_TEST
#endif

main_program.cppは、プログラム全体を実行するファイルです(mainメソッドが含まれています)。ご覧のとおり、DESIRED_TESTを定義してインクルードファイルを割り当てると、main_program.cppはインクルードされず、テストファイルのみがビルドされることになります(メインメソッドも含まれています)。ただし、コンパイルに関しては、次の出力が得られます。

1>main.obj : error LNK2005: _main already defined in some_test.obj
1>main_program.obj : error LNK2005: _main already defined in some_test.obj
1>C:\....... : fatal error LNK1169: one or more multiply defined symbols found

プログラムの主な開始点はmain.cppであり、他のすべてのオブジェクトファイルの複数の定義を無視して、そのファイルに従ってのみコンパイルおよびリンクする必要があることをコンパイラにどのように伝える必要がありますか?


この問題(main.cppファイル)をどのように克服したかを次に示します。

#define DESIRED_TEST "some_test.h"    

#ifndef DESIRED_TEST    

int main(int argc, char *argv[])    
{    
    // main program code here
}    

#else    

#include DESIRED_TEST    

int main() {    
    FUNCTION_CALL();    
}    

#endif

some_test.hファイル:

void some_test();
#define FUNCTION_CALL some_test

これで必要なのは、すべてのテストで新しいsome_test.hファイルとsome_test.cppファイルを作成し、関数呼び出しを定義することだけです。

Visual Studioでテスト標準を学びたくない理由は、私のレベルのプロジェクトのテストが本当に簡単だからです。将来的には学ぶ必要があるかもしれませんが、物事が本当に深く複雑になったときに学びます。

4

2 に答える 2

3

VCは.cpp フ​​ァイルをソースとして扱います。ソースは、ファイルがどこかに含まれているという事実に関係なく、個別にコンパイルする必要があります。これは通常の動作であり、変更しない方がよいでしょう。

代わりに、

  • .cppファイルの名前をまたはに変更.h.inc、代わりにヘッダーファイルをインクルードします
  • .cpp次のようなガードでコードをラップします

    //some_test.cpp
    #ifdef DESIRED_TEST 
    
    //code
    
    #endif
    
    
    //main_program.cpp
    #ifndef DESIRED_TEST 
    
    //code 
    
    #endif
    

    次に、.cppsをどこにも含めないでください。 DESIRED_TEST共通ヘッダーまたはプロジェクト設定で定義できます。

  • しかし、最善の策は、VisualStudioで提供されるテストフレームワークを研究して使用することです。

于 2013-01-17T19:42:51.567 に答える
0

しかし、「main_program.cpp」はまだプロジェクトに残っていますか?(そして別々にコンパイルされますか?)

あなたはmain.cppにいます:(main.cppはプロジェクトにあります)

#define DESIRED_TEST "some_test.cpp"

#ifndef DESIRED_TEST
#include "main_program.cpp"
#else
#include DESIRED_TEST
#endif

ここで、(ソリューションエクスプローラーで)プロジェクトからsome_test.cppとmain_program.cppを単純に除外しますが、ファイルは削除しないでください。IntelliSence、Object Browserのようなもの、またはインクルードの「命令」を右クリックしてファイルをすばやく開くことは引き続き機能します

于 2013-01-17T19:42:56.730 に答える