0

単体テスト プロジェクトの依存関係に問題があります。

私のプロジェクト構造は次のとおりです。

MyProject
  |---MyProject.pro
  |---src
  |     |---src.pro
  |     |---ClassA.h
  |     |---ClassA.cpp    
  |     |---ClassB.h
  |     |---ClassB.cpp
  |
  |---tests  
        |--tests.pro
        |--testClassA.cpp

MyProject.pro:

TEMPLATE = subdirs
SUBDIRS = src tests

src.pro:

TEMPLATE = app
TARGET = someApp
HEADERS += classA.h classB.h
SOURCES += classA.cpp classB.cpp

ClassA が ClassA.cpp で ClassB を呼び出すとします。

void ClassA::someFunctionInClassA()
{
   ClassB b;
}

ここで、ClassA の単体テストを行います。私はそうする2つの方法を見つけました。まず、src-Subproject をライブラリに変換します (TARGET = src.pro の lib)。次に、次の行を tests.pro に追加すると、すべて問題ありません。

LIBS += ../libSrc.so

2 つ目は、test.pro で ClassA によって使用されるすべてのファイルに名前を付けることです。これは、tests.pro が次のようになることを意味します。

TARGET = testclassA
TEMPLATE = app
/*...*/
HEADERS += ../src/ClassA.h \
           ../src/ClassB.h
SOURCES += testClassA.cpp \
           ../src/ClassA.cpp \
           ../src/ClassB.cpp

最初の解決策 (src-project を lib に変換する) を使用できないため、2 番目の解決策を使用する必要があります。それらの 1 つだけをテストしたい場合でも、すべてのソース/ヘッダーに名前を付ける必要がありますか? アドバイスありがとうございます!

4

1 に答える 1

0

最初の解決策を使用できないということは、ソース コードをあまり変更してはならないということです。TARGET=アプリとは何か、アプリであり続けなければならない。私の唯一の仕事は、プロジェクトに単体テストを追加することです。すべてのクラスに明示的に名前を付けない回避策を見つけました: tests.pro:

SOURCES += $$files(../pathToCppDir/*.cpp)
HEADERS += $$files(../pathToHppDir/*.h)
SOURCES -= ../pathToCppDir/main.cpp          // excluding second main(){}
于 2011-07-06T06:54:33.007 に答える