問題タブ [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++ - std 名前空間の不正な拡張を回避しながら、ベクトルを INFO()、CAPTURE()、WARN() などに渡すことを許可するにはどうすればよいですか?
Catch Unit Test v1.8.1 では、gcc 6.2.0 を使用して、ベクトルをINFO(...)
orに渡すことで、テストが失敗したときにベクトルの内容を便利に出力しようとしていCAPTURE(...)
ます。そのために、ストリーム挿入演算子をオーバーロードしています。
上記のように(違法に)名前空間を拡張するstd
と、機能し、目的の出力が表示されます。
しかし、合法的にしようとするために、operator<<
オーバーロードをstd
名前空間からグローバル名前空間に移動しようとすると ( をコメントアウトすることによって#define THIS_WORKS_BUT_EXTENDING_NAMESPACE_STD_IS_ILLEGAL
)、ベクトルをCAPTURE()
マクロに渡すためにコードがコンパイルされません。
Catch docs に従ってoperator <<
、オーバーロードをオーバーロードに置き換えてみましたCatch::toString
:
またはCatch::StringMaker
専門分野で:
CAPTURE()
しかし、どちらの場合でも、ベクトルをマクロに渡すため、テストはまだコンパイルされません。
Catch ドキュメントは、operator<<
オーバーロードをあなたの型と同じ名前空間に入れるように言っていますがstd::vector
、私の型ではなく、そのオーバーロードを名前空間に入れることstd
は違法です。
CAPTURE()
しかし、取得(またはINFO()
、または、など) が引数WARN()
を受け入れる唯一の方法は、オーバーロードを不正に namespaceに入れることです。std::vector
operator<<
std
これを行うための適切で合法的な方法はありますか?
c++ - 個別のビルド シェルを含む C/C++ プロジェクト インクルード フォルダーで、相互にファイルをインクルードできない
2 つのフォルダーを含む複雑な C++ プロジェクト フォルダーがあります。
- 複数のサブフォルダーと CmakeList.txt ファイルを含む C++ srcフォルダー。src フォルダーには、main.cpp ファイルが含まれています。
- C++ ビルド標準の外部フォルダーExtLibには、複数のサブフォルダーと、そのコンパイル用のbuild.shスクリプトと CmakeList.txt ファイルが含まれています。.cpp ファイルは、この ExtLib フォルダーにリンクされています (ヘッダー (.h) ファイルを含む)。
プロジェクト フォルダーには、プロジェクトをコンパイルし、デバッグおよびリリース構成を含むビルド フォルダーを作成するメインの build.sh ファイルが含まれています。また、build.sh ファイルの実行時に実行されると思われる CmakeList.txt ファイルも含まれています。このプロジェクトで実行する必要があるタスクは、新しいtestsフォルダーを作成し、src フォルダー .cpp ファイルに記述されたコードに対して (catch unit-test を使用して) 単体テストを実行するファイル ( runtests.cpp ) を追加することです。
私が直面している問題:
最初の問題は、tests フォルダーにソース テスト ファイルを作成していて、src フォルダーからヘッダー ファイルをインクルードしようとすると、コンパイラーが (src フォルダーから) そのような (.h) ファイルが見つからないという致命的なエラーをスローすることです。また、ExtLib フォルダー ファイルを見つけることができないため、src フォルダー ファイルで問題が発生することもあります。
2 番目の質問は、他の src または ExtLib フォルダーからファイルを正常にインクルードする方法がある場合、テスト ケースを実行するためにテスト ソース ファイル runtests.cpp を実行するにはどうすればよいかということです。
プロジェクトの階層は次のとおりです。
TestProject
│ build.sh
│ CMakeList.txt
└───ExtLib
│ │ buildscript.sh
│ │ CMakeList.txt
│ └───subfolder1
│ └───subfolder2(containing sub-folders)
└───src
│ │ main.cpp
│ │ CMakeList.txt
│ └───folder1
│ └───folder2(containing sub-folders)
└───tests
│ runtests.cpp
│ catch.hpp
テスト フォルダーにも CMakelist.txt ファイルを含める必要がありますか? 必要ならどうやって作るの?私はこの分野に非常に慣れていません。皆さんが助けてくれることを願っています。ありがとうございます