39

Qt プロジェクトを取得し、Qt Creator を使用しています。すべてのコードを単体テストしたい。
ただし、私は QTestLib フレームワークの初心者ですが、Qt ベースのソースのテストには誰もが推奨しています。今、アプリプロジェクトでテストプロジェクトを構成する方法が少し混乱しています。

  1. すべてのソース コードとテスト コードを同じプロジェクトに入れることはできますか? もしそうなら、どうすればそれらを管理できますか?1 つのプロジェクトでアプリを起動したり、テストを開始したりするためのオプションが見つかりませんでした。
  2. アプリのソースとテスト コードを別のプロジェクトに配置すると、テスト プロジェクトがアプリ プロジェクトを参照することになり、あまり便利ではありません。
  3. テストが必要なクラスのロットについて、テスト コードをどのように管理すればよいですか?

このような状況でコードのテストをどのように管理していますか? ありがとう。

4

4 に答える 4

18

以下のような最初の構造ソース:

MyApp
MyAppUnitTest

MyAppプロジェクトの下で、を使用MyAppSrc.priしてソース ファイルを見つけます。

SOURCES += \
    ../../../framework/src/myapp.cpp \
    ../../../framework/src/mycontrol.cpp

HEADERS += \
    ../../../framework/inc/myapp.h \
    ../../../framework/inc/mycontrol.h

INCLUDEPATH += ../../../framework/extlibs

これ.priを次のMyApp.proように含めます。

include(MyAppSrc.pri)

次に、メイン プロジェクトとまったく同じようにテスト プロジェクトを構成しますMyAppUnitTest.pro

include(MyAppUnitTestSrc.pri)
include(../MyApp/MyAppSrc.pri)
于 2012-12-25T02:46:21.763 に答える
1

Qt プロジェクトをビルドするために、qmake の代わりに CMake の Qt Creator を使用しています。

基本的に私はフォルダに持っている:

src
tests

各テストは、それ自体がクラスをテストするプログラムです。テストするアプリは、ライブラリとしてコンパイルされます。. フォルダー src 内のすべてのソースをライブラリーとしてコンパイルします。

// ClassTest.cpp
#include "ClassTest.h"
#include "Class2Test.h" // Class of the app

#include <QtTest/QtTest>

ClassTest::ClassTest( QObject* parent )
    : QObject(parent)
{ 
}

QTEST_MAIN( ClassTest )
#include "ClassTest.moc"

libをテスト実行可能ファイルにリンクするだけです。

例:

src フォルダの CMakeLists.txt の例

add_library( MyAPP
    SHARED
    Class2Test.cpp
)
target_link_libraries( MyAPP
    ${QT_LIBRARIES}
)

テストごとに、tests フォルダー CMakeLists.txt の例で。

qt4_automoc( ${test_src} )
add_executable( ${test_name} ${test_src} )
target_link_libraries( ${test_name}
    MyAPP
    ${QT_LIBRARIES}
    ${QT_QTTEST_LIBRARY}
)

まだ同じプロジェクトにありますが、フラグを追加して、ユーザーがテストをコンパイルできるようにするかどうかを指定できます。アプリは変更されず、アプリの各クラスをテストできるため、クリーンです。

于 2012-12-21T23:56:22.640 に答える