問題タブ [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.
c++ - CMake:単体テストを使用したプロジェクト構造
プロダクションソース(src
サブフォルダー内)とテスト(サブフォルダー内)を含めるようにプロジェクトを構成しようとしていtest
ます。私はこれを構築するためにCMakeを使用しています。最小限の例として、次のファイルがあります。
CMakeLists.txt:
src / CMakeLists.txt:
src / sqr.h
src / sqr.cpp
src / main.cpp-sqrを使用しますが、実際には関係ありません
test / CMakeLists.txt:
test / test.cpp:
いくつかの質問:
- この構造は意味がありますか?このコードを構造化する際のベストプラクティスは何ですか?(私はC#とJavaから来ていますが、ある意味で簡単です)
src
ファイル内のフォルダからすべてのファイルを一覧表示する必要があるという事実は好きではありませんtest/CMakeLists.txt
。これが図書館プロジェクトの場合は、図書館をリンクするだけです。他のプロジェクトのすべてのcppファイルを一覧表示しないようにする方法はありますか?- 線
enable_testing()
とは何add_test(MyTest test)
ですか?効果は見られません。CMake(またはCTest)からテストを実行するにはどうすればよいですか? - これまでのところ
cmake .
、ルートフォルダーで実行しましたが、これにより、あらゆる場所に一時ファイルが混乱しました。合理的な構造でコンパイル結果を取得するにはどうすればよいですか?
c++ - Boost Test フレームワークで double 値の最初の 15 桁が同じかどうかを確認するにはどうすればよいですか?
仕事用に設計されていると思われるものを使用しようとしたBOOST_CHECK_CLOSE
ので、次のテストがあります。
ただし、最初のチェックは次のエラーで失敗します。
計算すると、次のようになります。
これは 1e-14 未満です。ここで何が間違っていますか?
c++ - Visual Studio でのブースト テスト
Visual Studio 2010 で簡単な単体テスト プロジェクトをコンパイルしようとしています。testrunner.cpp があります。
およびexampletests.cpp
この例は Linux では問題なく動作しましたが、ここではコンパイルに失敗します。
私は何を間違っていますか?どうすれば修正できますか?
編集: Arne Mertz からの回答を適用すると、次のようになります。
c++ - ブーストテストと非同期IO:アドレスでのメモリアクセス違反:障害アドレスでのマッピングなし
tcpipの非同期I/Oのブーストテストを設定しようとしています。
tcp msgを送信する私の関数:
これで、この関数はメインスレッドで実行するだけで正常に機能します(ブーストテストを実行して実行していません)
私のブーストテスト機能は次のようになります。
次のエラーで失敗します。
そのような非同期関数をテストするときに注意すべきことはありますか?
私のビルド情報は次のとおりです。
編集:
私も次の方法でそれを変更しようとしましたが、それでも同じエラーが発生します:
boost - cmakeでブーストテストを構築する際の問題
私は C++、Boost テスト、および CMake にかなり慣れていないため、ここでのつまずきをご容赦ください。
これが私のトップレベルの CMakeLists.txt です
そして、これがテストディレクトリの横にあるCMakeLists.txtで、TestRunner.cppとtypes_test.cppが含まれています
TestRunner.cpp は次のようになります
結果のメイクファイルを実行すると、
検索した後、 add_executable 行の前に次の行を追加してみました。
ただし、これを追加すると、巨大な「アーキテクチャ x86_64 の未定義シンボル」エラーが発生し、文字列、ostream、vtables の欠落などについて不平を言います。
最初はシステム ライブラリが必要なようには見えませんでしたが、それを完全に除外すると、巨大な undefined-symbols エラーが発生します。
誰かが私が間違っていることを知っていますか? 私は gcc 4.7 で Mountain Lion を使用しています。
助けてくれてありがとう。
Kleist の提案を試すために編集します。
なので、これに変更すると
私はこの結果を得る
これは、link_directories 行を含めるかどうかに関係なく発生します。
編集: make VERBOSE=1 結果を含む
「未定義のシンボル...」以降の最後のエラーと同じように見えるため、残りのエラーは省略しました。
c++ - 絶対差を扱う BOOST_CHECK_CLOSE のバージョン
パーセンテージではなく絶対差で機能する BOOST_CHECK_CLOSE のバージョンはありますか? 場合によっては、絶対差の方が理にかなっている場合があります。たとえば、お金を扱っている場合 (そうです、double が最適なタイプではないことはわかっています)、答えが最も近いペニーに問題がないことを確認する場合があります。他にもたくさんの例があります。
BOOST_CHECK_SMALL などを使用してこれらのいずれかを自分で記述するのはかなり簡単ですが、正しいマクロの詳細な出力により、エラーを追跡するのがはるかに簡単になります。
c++ - ブースト テスト ユニットは mpi 関数を呼び出すことができません
私は徹底的に調べましたが、この問題への言及を見つけることができませんでした。
ブースト/ユニットでテストしているc ++プログラムを作成しました。シリアル バージョンは正常に動作し、単体テストは動作しています。
これで、MPI で恥ずかしいほど並列処理を行う関数を使用して、プログラムを並列化しました。並列関数 (パラ関数と呼びましょう) を呼び出している自分のテストを書き留めておけば、正常に機能しており、MPI は問題なく実行されます。
コンパイルは mpic++ で行い、mpixec を使用してプログラムを実行します。
ただし、ブースト テスト ケースで parafunction を呼び出すと、MPI がすべてうまくいかず、テストが複数回起動され、複数回MPI::Init
呼び出されるとプロセスがクラッシュします。これが私が得るエラーの例です:
MPI_FINALIZE が呼び出された後に、MPI_comm_size() 関数が呼び出されました。
これは、MPI 標準では許可されていません。
MPI ジョブが中止されます。
私のテスト ケースは、master_test_suite によって自動的に処理される test_unit にあります。並列化なしで言ったように、完全にうまく機能します。
Parafunction はMPI::Init
とMPI::Finalize
を呼び出します。ファイルのその他の関数は、MPI 関連のものを実行することは想定されていません。
誰かが以前に同様の問題に遭遇したことがありますか?
私のテスト実行はかなり長いので、プログラムの並列バージョンを実際に使用することができました!
ご協力いただきありがとうございます
c++ - BOOST_CHECK_NO_THROW 例外メッセージを出力する方法
を使用してメソッドをテストするとき
例外がスローされた場合、例外がスローされたことが表示されますが、次のような例外のメッセージは表示されません。
例外メッセージ、つまり によって返される文字列も出力できますmy_exception.what()
か? はand overloadsmy_exception
から派生しています。std::exception
what()
c++ - Google テストで BOOST_CHECK_EQUAL_COLLECTIONS
Boost Test LibraryにあるBOOST_CHECK_EQUAL_COLLECTIONSアサーションと同等のアサーションをGoogle C++ Testing Framework/gtestで見つけようとしています。
でも; 成功せずに。だから私の質問は2つあります:
- gtestには同等のアサーションがありますか?
- そうでない場合: gtestで container-content をアサートするにはどうすればよいでしょうか?
編集(わずかに修正された回答):
c++ - CLOSE と CLOSE_FRACTION の違い
BOOST_CHECK_CLOSEとBOOST_CHECK_CLOSE_FRACTIONの違いを説明できる人はいますか?
boost.test Testing Tools Reference をざっと読んだところ、同じ説明があると確信しています。