私は初めて私のプロジェクトに単体テストを追加しようとしています。QTユニットQMetaObjectのmoc "未解決の外部シンボル"をテストする
(プロジェクトのクラスを使わずに)モックテストを正常に実行して、アプリケーションを正常に実行できます。しかし、プロジェクトからオブジェクトをインスタンス化すると、QMetaObjectの未解決の外部シンボルが得られます。私が正しくリコールすれば、これはオブジェクトのモックがプロジェクトに含まれていないことを意味します。
これを修正するにはどうすればよいですか?私はgoogletestsを使用して同じ問題があります。ガイドはまた、これについて助けません。私は同じ結果をテストするプラグインをqtユニットをインストールしようとしました。
私は、私は前述のプロジェクトで使用している同じ構造を次のモックプロジェクトをアップロードし、ここでそれを取得しました:https://github.com/quimnuss/QtUnitTestingTest
私はWindows上でQTの静的ビルドを使用していますが、私は推測しますそれは無関係です。 IDEとしてQtCreatorを使用し、NMAkeをビルドします。
また、HelloWorld.libを追加しようとしましたが、Makefile.releaseを見てみると、使用されていません。
誰かが私が間違っていることを知っていますか?
QT += widgets network testlib
TARGET = tst_someunittesttest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
INCLUDEPATH += $$PWD/../HelloWorld
include($$PWD/../HelloWorld/helloworldCommon.pri)
LIBS += -L"$$OUT_PWD/../HelloWorld/release"
LIBS += -lHelloWorld
message("Searching libs here $$LIBS")
SOURCES += tst_someunittesttest.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"
最初のエラーの完全なメッセージ:あなたは、次のフラグを使用すると
tst_someunittesttest.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __cdecl HelloWorld::metaObject(void)const " ([email protected]@@[email protected]@XZ)
、私は内、あなたがテストしたいプロジェクトがHelloWorldのあることを理解そのプロジェクトにはHelloWorldとMainWindowという2つのクラスがあります。なぜあなたが作成していないライブラリをリンクしたいのか分かりません。 HelloWorldクラスは一度も使用されていません。正確に何をテストしたいですか(HelloWorldクラスまたはMainWindowクラス)? – eyllanesc
その模擬例では、 'HelloWorld'です。私は実際に 'true'を返す関数' returnsTrue'をテストしています。そのプロジェクトをビルドするとHelloWorld.libが作成されますが、ソースが存在するのでユニットテストに必要かどうかはわかりません。 – quimnuss
.proにLIBS + = -lHelloWorldと書かれているので、ライブラリをビルドする必要がある場合。私はコードをアップロードする瞬間にテストを構築しました。 – eyllanesc