問題タブ [catch-unit-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++ - テスト ケースの順序をキャッチ
CatchTEST_CASE
で複数の s の実行順序を保証できますか? LLVM を使用していくつかのコードをテストしていますが、明示的に初期化する必要があるいくつかの卑劣なグローバル状態があります。
現在、次のようなテスト ケースが 1 つあります。
私が望むのは、それを 3 つにリファクタリングすることですTEST_CASE
。
- 1 つはコンパイルに合格する必要があるテスト用で、
- 1 つは失敗するはずのテスト用であり、
- 1つは解釈に合格する必要があるテスト用です(将来的には、おそらくそのような分割がさらに行われるでしょう)。
しかし、不便なグローバルを設定する前にTEST_CASE
それが呼び出された場合、それらは初期化されず、テストは誤って失敗するため、単純にテスト内容を別の内容に移動することはできません。TEST_CASE
c++ - C++ の例外と BDD - Catch ライブラリ
私はこれまで Boost.Test を使用してきましたが、代わりに Catch で BDD を使用することを検討していますが、例外を処理する適切な方法を見つけるのに苦労しています。次のようなテストがあるとします。
connect() が適切な方法で例外をスローするという事実を処理する方法を考えています。例外を保存して try-catch に保存し、THEN の下で検証できると思いますが、それはあまり良くないようです。Boost.Test テストケースでは、次のようにしました。
しかし、それは非常に BDD ではないようです。BDD テストを使用する場合、例外をスローするコードを通常どのように処理しますか?
unit-testing - オプションのテストの処理
CATCH、Google Test 、およびその他のフレームワークでテストをスキップする方法がないため(少なくとも、そうする理由を指定して出力で確認する従来の意味では)、それが必要かどうかを考えさせられました (私は過去のプロジェクトでUnitTest++を使用してきました)。
通常、デスクトップ アプリで何かをスキップする理由はありません。テストするかしないかのどちらかです。ただし、ハードウェアに関しては、保証できないものもあります。
たとえば、2 つのデバイスがあります。1 つにはビーパーが組み込まれていますが、もう 1 つにはありません。UnitTest++ では、システムにクエリを実行し、ビープ音を使用できないことを確認し、ビープ音に依存するテストをスキップします。もちろん、CATCH でも同様のことができます。初期化中にシステムにクエリを実行し、「ビープ音」タグ ( CATCHの特別な機能) を持つすべてのテストを除外するだけです。
ただし、わずかな違いがあります: テスター (私以外の誰か) は出力を読み、言及されているオプションのテストを見つけられません (一方、UnitTest++ ではそれらはスキップされたとマークされ、その理由は出力の一部として提供されます) )。彼の最初の考え:
- これは、テスト アプリの古いバージョンである必要があります。
- スイート X を有効にするのを忘れたのかもしれません。
- 何かが壊れている可能性があります。開発者に問い合わせる必要があります。
- 待ってください、多分彼らはちょうどスキップされました. しかし、なぜ?とにかく開発者に聞いてみます。
さらに、実際にはスキップされるべきではないのに、それらのテストがスキップされたことに気付かなかった (つまり、ビープ音の有無に関係なく、OS は「false」を返します。これは重大なバグです)。1 つのオプションは、「スキップされた」テストを合格としてマークすることですが、それは不必要な回避策のように感じます。
私が気付いていない巧妙なテクニックはありますか (つまり、オプションのテストをスタンドアロン プログラムに完全に分離することはわかりません)? そうでない場合-UnitTest ++に固執する必要がありますか? それは仕事をしますが、コードの繰り返しを避けるのに役立つCATCH のSECTIONsとtagsが本当に好きです。
c++ - 「Catch」情報のログバッファを取得または出力する方法は?
Catch single-include unit-testerを使用して、このような(合格)テストがあります
ドキュメント(上記のリンク)には、INFOがバッファに記録されると記載されていますが、バッファをダンプまたは取得する方法がわかりません。メッセージはコンソールに出力されませんが、私がprintf
押し込んだり出力したりcout
する他のものは出力cerror
されるため、I/O は正しく設定されています。メッセージがどこに格納されているかを知るためにソースを読んでみましたが、大きくて複雑です。誰かがたまたまメッセージを取得する方法を知っているのだろうか?
c++ - C/C++ でフィクスチャ データを整理し、テストからアクセスする方法
次の場合、テスト コードでデータ フィクスチャ ファイルへのパスを計算するにはどうすればよいですか。
test/{main.cpp,one_test.cpp,two_test.cpp}
- で行われたコンパイル
build/
test/fixtures/{conf_1.cfg}
私が直面している問題は次のとおりです。
これまでに見つけた解決策は、構成時にマクロを定義することです。
wscript
私のwithで得られる
__FILE__
に拡張された他の試みが含まれていました../test/one_test.cpp
が、使用できませんでした。
背景: Catch testing frameworkとwaf build tool を使用しています。
おそらくテストフレームワークに依存する、一般的な慣行またはパターンはありますか?
c++ - 単体テスト ライブラリのリンク エラーをキャッチする
以下にリンクされている CATCH 単体テスト スイートを使用しようとしています。 https://github.com/philsquared/Catch
しかし、私はそれを正しくすることができません。main.cpp と test.cpp は次のとおりです。
この 2 つのファイルが同じフォルダーにある場合、目的の結果を得ることができました。ただし、 をtest.cpp
という名前のサブディレクトリに移動しましたtest
。期待どおりに機能しなくなりましたが、リンク エラーが発生します。
私のcmake設定を以下に説明します。
file(GLOB_RECURSE INCS "./*.cpp")
サブディレクトリにあるすべての cpp ソース ファイルを含めるために追加されました。のinclude_directories(.)
定義を知らせるために含まれていましたcatch.hpp
。
私は何か間違ったことをしたと確信していますが、それを修正する方法がわかりません。この問題を解決するために私にアドバイスしてください。
Windows 上で実行され、mingw gcc-4.9.1 を使用してコンパイルされ、cmake ninja ジェネレーターによって生成されました。
編集: エラー メッセージの最初の数行を追加しました。
失敗しました: cmd.exe /c cd 。&& C:\MinGW\bin\g++.exe CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/test/testTest.cpp.obj -o catchTest. exe -Wl,--out-implib,libcatchTest.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 - loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd . CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0): `Catch::getResultCapture()' の複数定義
CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0): 最初にここで定義
catch-unit-test - 追加のアクションを挿入して、テストを繰り返す良い方法はありますか?
Catch がテストのネストされた階層を持っている方法が気に入っており、組み合わせによって機能します。xUnit フレームワークのセットアップ/ティアダウンよりも自然に感じられます。
私は今、一連のテストを持っています。私がやりたいことは、ロード/セーブシリアライゼーションテストを挿入し、そのポイントより下のすべてのテストを、最初はロード/セーブせずに、次にシリアライゼーションプロセスからロードしたデータを使用して繰り返すことです。つまり、ロード/セーブが正しかったことを証明するためです。
Catch がこれに役立つ何かを持っている場合、私は頭を悩ませることができませんか? @depends
phpUnit の場合、一連のテストについて考え@dataProvider
、ブール値の入力で a を使用します。少し醜い。
(それが意味をなさない場合は、お知らせください。最小限の例を作成しようとします)