問題タブ [boost-test]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
boost - テスト DLL と製品 DLL を使用する場合のリンクの問題
DLL の内部コンポーネントの単体テストを書きたいのですが、テスト プロジェクトでは、エクスポートされたシンボルにしかアクセスできません。内部クラスもテストしたいのですが、テストのためだけにエクスポートしたくありません。ブースト テスト、ビジュアル スタジオ 10、および動的リンクを使用しています。私が受け取るメッセージは
何か案は?
c++ - 単体テストを別のライブラリに配置する必要がありますか? サブディレクトリを分ける?
私はいくつかの(あまりにも少ない)単体テストを持つコードの大規模なライブラリを持っています。ライブラリにコードを追加して、新しいコードの単体テストを作成しようとしています (将来、経験を積んだら、古いコードの単体テストも追加したいと考えています)。
現在、カスタムの (あまり精巧ではない) 単体テスト フレームワークを使用しています。に切り替えたいboost.test
です。
私のライブラリのレイアウトは次のとおりです。
mylib1 (300 ファイル、70000 行のコード)
- ソース
- ふー
- foo.cpp
- foo_part.cpp
- foo_part.h
- UnitTests -外に移動する必要があり
mylib
ますか?- foo_test1.cpp
- foo_test2.cpp
- foo_test3.cpp
- バー
- bar.cpp
- bar_part.cpp
- bar_part.h
- UnitTests -ここに属していますか?
- bar_test1.cpp
- bar_test2.cpp
- bar_test3.cpp
- ふー
- 含む
- foo.h
- bar.h
- ソース
mylib2 (70 ファイル、7000 行のコード)
- 上記の mylib1 のように見えます
UnitTestFramework
- ソース
- MockObject1.cpp -ここに属しますか?
- Asserter.cpp -
boost.test
置き換えます - TestFixture.cpp -
boost.test
置き換えます
- 含む
- MockObject1.h
- Asserter.h -
boost.test
置き換えます - TestFixture.h -
boost.test
置き換えます
- ソース
ここで次の質問をします。
- 単体テストは
mylib
DLL の一部であるべきですか?mylib1
(私はとmylib2
を 1 つの DLLにリンクします) - 単体テストのソース コードは
mylib1
ディレクトリの下に配置する必要がありますか? - 私は
mylib1
とを持っているのでmylib2
、対応する単体テストをどのように配置する必要がありますか?兄弟ディレクトリ、一緒など? - モック オブジェクトのソース コードはどこに置くべきですか? (彼らは と の両方を提供
mylib1
しますmylib2
)
c++ - Boost.Test カスタム テストの概要
Boost Unit Testing フレームワークを使用して、実行時にテスト結果 (合格または不合格のすべてのアサーション) を読み取る方法はありますか?
私が望むのは、カスタム テスト ログを作成し、実行する各テストの後に人間が判読できるカスタム形式でコンソールに出力することです。
c++ - Boost Test ライブラリで手動登録を使用するのはいつですか?
私は常に Boost Test での自動登録を使用していました。さて、私は、手動登録は何のためにあるのだろうか?自動登録で対応できないケースはありますか?
補足ですが、今回はモックにもタートルを使用します。
編集:私の質問は明確ではないようですが、より正確には:
- 自動登録の代わりに手動登録を使用する必要があるのはどのような場合ですか?
- なぜそうするのですか?自動登録では不十分な実際の状況とは?
c++ - ブースト単体テスト cpp ファイルがライブラリ内の 1 つのオブジェクト ファイルを認識できない
ブースト単体テストを使用するために作成された test.cpp ファイルがあります。
このtest.cppをlibaという名前のライブラリにリンクしようとしています。
私のlibaの1つのクラスが宣言されていないというエラーメッセージを出し続けます。同時に、同じライブラリ内の別のクラスを見つけることができます。
ポジティブ コントロールとして、このライブラリをメイン ファイルにリンクしました。これは正常に機能します。
コンパイルに完全に合格します。
コンパイル済みライブラリ内の特定のクラスのファイルは、テスト ファイルからは見えませんが、メイン ファイルからは完全にアクセスできるようです。誰か私にいくつかの提案をしてもらえますか?
main - リンカーが Boost.Test で「間違った」メインを選択する
Boost.Test を使用する場合、通常、main()
Boost.Test 自体が関数を提供するため、関数を定義する必要はありません。
最近、プロジェクトを変換して、サードパーティ ライブラリの静的リンクを使用する必要がありました (VS2010 上)。.lib
当然のことながら、ビルドが成功するよう に複数の にリンクする必要があり、私のビルドは問題なく実行されました。
しかし、テスト プロジェクトを実行すると、非常に奇妙なことが起こりました。.lib
私の依存ライブラリの1つに必要なサードパーティのs(libpng)の1つに、(知っておく必要がある場合)main()
内に関数が定義されたテストファイルが含まれていたようです。
私のプロジェクトには機能がなかったので、リンカーはそれを私の「テスト」アプリケーションとして選択しました。したがって、私のテストは実行されません。pngtest.c
main()
これを防ぐ方法を知っている人はいますか?リンカー/コンパイラに Boost.Test を使用するように指示するにはどうすればよいmain()
ですか?
boost - BoostTestingFrameworkのリターンコード
unit_test_main
Boost Testing Frameworkからの関数のリターンコードの意味は何ですか?
c++ - BOOSTユニットテストスタックオーバーフロー
現在、Boost Unit Testを使用して、プロジェクトの単体テストを実行しています。単体テストを実行するたびに、メモリスタックの問題が発生しました。BOOSTライブラリのソースコードをデバッグしましたが、unit_test_suite.hppファイルで次のコードを呼び出すと問題が発生することがわかりました。
VC10から取得したエラー情報は次のとおりです。
テストプログラムの何が問題なのか疑問に思いました。ありがとう!
編集コードを調べた提案に基づいて、非常に奇妙なことが起こります。テストスイートがmain()と同じプログラムで定義されている場合、それは機能します。ただし、テストスイートが.dllからのものである場合、エラーが発生します。私の問題を説明するために、次のコードをリストします。
上記のコードは非常にうまく機能します。ただし、テストスイートが.dllからのものである場合、たとえば次のようになります。
次に、次のコードを使用してこのテストスイートを呼び出すと、次のようになります。
迷惑なスタックオーバーフローエラーが発生します。
問題の夏
ブースト単体テストライブラリ(定義付き-DBOOST_ALL_DYN_LINK -DBOOST_TEST_NO_MAIN -DBOOST_TEST_DYN_LINK -DBOOST_ALL_NO_LIB
)と実行中の実行可能プログラムを同じダイナミックランタイムライブラリ(マルチスレッドデバッグDll(MDd))にリンクすると、機能します。
ブーストユニットテストライブラリ(定義付き-DBOOST_ALL_DYN_LINK -DBOOST_TEST_NO_MAIN -DBOOST_TEST_DYN_LINK -DBOOST_ALL_NO_LIB
)と実行中の実行可能プログラムがコンパイルされ、同じ静的ランタイムライブラリ(Multi-thred Debu(MTd))にリンクされている場合、クラッシュが発生しますが、クラッシュはとは異なります。私が上で報告したもの:
Boostが(の定義を使用して)静的ライブラリとして構築され、-DBOOST_TEST_NO_MAIN -DBOOST_ALL_NO_LIB
Boostライブラリと実行可能プログラムの両方が同じ動的ランタイムライブラリ(MDd)で構築されている場合。次のクラッシュが発生します。
Boostが(の定義を使用して-DBOOST_TEST_NO_MAIN -DBOOST_ALL_NO_LIB
)静的ライブラリとして構築され、Boostライブラリと実行可能プログラムの両方が同じ静的ランタイムライブラリ(MTd)で構築されている場合。次のクラッシュが発生します。
c++ - C++ 単体テストのテストを並行して実行する方法はありますか?
Boost Test を長い間使用していますが、テストの実行が遅すぎます。各テストは高度に並列化されているため、すべてのコアと同時に実行したいと考えています。
Boost Test Library を使用してそれを行う方法はありますか? 解決策が見つかりませんでした。カスタムテストランナーの書き方を調べようとしましたが、その点に関するドキュメントはあまりありませんでした:(
方法がない場合、誰かがその目標を達成するための優れた C++ テスト フレームワークを知っていますか? 私はGoogle Testが仕事をするだろうと思っていましたが、テストを並行して実行することもできないようです。フレームワークの機能が他のよく知られているフレームワークよりも少ない場合でも、それは問題ではありません。単純なアサーションとマルチスレッド実行が必要なだけです。
ありがとう