私のユニットテストプロジェクトの依存関係に問題があります。QTestLib:ターゲットテストの問題=アプリケーション
次のように私のプロジェクト構造は次のとおりです。
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-Subプロジェクトをライブラリに変換します(src.proのTARGET = lib)。それから私はtests.proに次の行を追加し、そのすべての罰金:
LIBS += ../libSrc.so
秒1はtest.proににClassAで使用されるすべてのファイルに名前を付けることです。
TARGET = testclassA
TEMPLATE = app
/*...*/
HEADERS += ../src/ClassA.h \
../src/ClassB.h
SOURCES += testClassA.cpp \
../src/ClassA.cpp \
../src/ClassB.cpp
は、私が最初のソリューション(LIBにSRC-プロジェクトを変換)を使用することはできませんので、私は2番目のいずれかを使用する必要があります。これは私のtests.proがどのように見えることを意味します。私がそれらのうちの1つだけをテストしたいとしても、本当にすべてのソース/ヘッダーに名前を付ける必要はありますか? アドバイスをいただきありがとうございます。
私は*私は* ...最初のソリューションを使用することはできません得ることはありませんが、あなたの質問には、場合'ClassA' *実際には' ClassB'をインスタンス化します。そうすれば、テスト実行ファイルで 'ClassB.cpp'をコンパイルする必要があります。そうしないと、 '未定義参照 'を取得します。 – vrince