問題タブ [cpputest]
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.
cortex-m3 - 2 つのファームウェアが同じリンカー スクリプトでリンクされている場合、リセット ベクターのアドレスが異なるのはなぜですか?
Cortex-M3 チップがあり、eCos を使用するブートローダーを実行しています。ブートローダーは、ファームウェアの更新などを確認した後、実際のアプリケーションが存在する ROM 上の別の場所 (BASE_ADDRESS_OF_APP + 0x19) にジャンプします (これも eCos でコンパイルされています)。
ここで、通常のファームウェアを実行する代わりに、Cortex-M3 ターゲット用にコンパイルされた CppUTests を実行したいと考えています。そのため、実際のオペレーティング システムではなく、ecos glibc を使用してターゲット プラットフォーム用にテストをコンパイルおよびリンクできます。しかし、JTAG を使用してボードにロードすると、実行されません。
arm-eabi-objdump を使用して調査した結果、CppUTest ファームウェアのリセット ベクターが、通常のファームウェアのオフセット 0x18 とは対照的に、オフセット 0x490 にあることがわかりました。私の疑いは、これがテストが実行されない理由であるということです。これは正しいです?
2 つのファームウェアを同じリンカー スクリプトでリンクしているときに、これらのファームウェアの開始アドレスが異なる可能性があるのはなぜですか?
テスト プログラムの開始点がアプリケーションの開始点と同じであることを確認するにはどうすればよいですか?
c - CppUTest: 特定のモック呼び出しにより多くのデータを渡す方法は?
一部の C/C++ プロジェクトで CppUTest の使用を開始しています。特にモッキング拡張機能は良さそうですが、どうやってモックを設定すればいいのか、今悩んでいます。ネットワーク ソケット通信を抽象化するための低レベル クラスを想定します。
私の最初の方法:
期待値の設定:
ここまでは順調ですね。しかし、私が必要とするのは、より多くのデータを提供することです。この場合、buf ポインターを介して返したい 15 バイトです。.setData()
とsetDataObject()
メソッドを使用しようとしました。しかし、関数は、予想される関数呼び出しではなく、名前付き変数にデータを格納しているようです。したがって、後続の呼び出しは前のデータを上書きしますよね?
私の現在の問題は、追加の戻りデータをモッキングメソッドに渡すにはどうすればよいですか? これに対する私の最初のアプローチは、戻り値 (size_t) とデータ バッファーの両方を含む結果のクラスを作成することでした。このような:
そして期待:
質問:これは正しい方法ですか、それとも何か見逃していますか?結果インタープリターをテストする必要があるため、バッファーの内容が必要です。
私の2番目の方法:
期待値の設定:
この場合、テスト対象のコードによって生成された buf の発信データを検証したいと考えています。したがって、そのバッファーの内容 (および長さ) をテスト関数に返す必要があります。このような:
そして期待:
これは非常に見苦しく、私には多くのオーバーヘッドがあります。再び私の質問:これは正しい方法ですか、それとも何か見逃していますか?
そして私の最後の質問: 完全に間違った方法でテストしている可能性はありますか? 経験談や実践を教えてください!
c++11 - g++ 4.7.2 で -std=c++11 を使用すると CppUTest エラーが発生する
しばらくの間、g++ 4.7.2 で CppUTest を問題なく使用しています。ただし、-std=c++11
使用を開始できるようにオプションをオンにしたところ、std::unique_ptr
すぐに失敗します。
メインモジュールをコンパイルするだけでも:
次のバリエーションで失敗します。
オプションを削除する-std=c++11
と、すべてが正常に機能するようになります。
CppUTest のドキュメントでは、オーバーロードされた新しい演算子と競合するマクロについていくつかのコメントがあり、最初に標準ヘッダーを #include することを提案していますが、ヘッダーをまったく含めずにこの問題が発生しCppUTest/CommandLineTestRunner.h
ます<string>
。
誰でも以前にこれに出くわしたり、問題が何であるかを知っていますか?
c++ - 入力と期待される結果が指定されているシナリオ テーブルから単体テストを生成する
現在、モジュールのポストコーディング UT を生成しようとしています。このモジュールは入力データを DB に分類し、一致が見つかった場合は適切な値を返します。
考えられるすべての入力シナリオとそれらの期待される結果を含む表を作成した後、50 以上のテストを作成する必要があることがわかりました。テスト名と入力を除いて、すべてのテストは基本的に同じなので、ある種のテンプレートがここに収まるように見え、コードの混乱を減らします。
私が最初に想像したのは、そのようなテンプレートを作成し、入力データと期待される結果でテストに展開するマクロ、またはマクロの助けを借りてシナリオテーブルを表す構造を使用してラップするマクロでした。(ここでは C++ テンプレートでも十分だと思います)。
ただし、これが正しい道であるかどうかはわかりません。誰かがそれに取り組む方法についていくつかの推奨事項を提供できるかどうかを知りたいです. また、TDD アプローチにどのように適合するかという問題もあります。
CppUTest を使用したアイデアは次のとおりです。
使用例:
macos - CppUTest の例が機能しない
ガイドに示されているように、brewを使用してMACにCppUTestをインストールしました。サンプル cpp をビルドしようとすると失敗しました。
それらのマクロを定義するヘッダーファイルが含まれていないためだと思います。したがって、次のようにインクルードを追加します。
今、私はたくさんのエラーを受け取ります。
c++ - cpputest エラー メッセージの割り当て/割り当て解除
cppunit を使用してアプリケーションをテストすると、このエラー メッセージが表示されます
この特定の問題は既に解決しています。私の質問は、不明なファイルと行 0 の代わりに、より良い情報を有効にするにはどうすればよいですか?
c++ - シンボルが .lib で定義されている場合、VS2010 (lnk2001) で「未解決の外部シンボル」が表示されるのはなぜですか? C++、ブースト、cpputest
リンカーから次のエラーが表示されます。
「欠落している」シンボルの定義を繰り返し見てきたが、何の問題も見当たらなかったので、本当に明らかな何かが欠落しているに違いない。
シンボルの定義は .lib ファイルにあります。その .lib ファイルの dumpbin /symbols からの出力には、次のように表示されます。
そして、その .lib ファイルから正常に解決されている他のシンボルがあります! (実際には、同じ .obj からです。) [更新: 前のステートメントはもはや真実ではないと思います。これは、.h ファイルで定義されていない関数にアクセスする最初の試みかもしれません。]
以下の内容は問題とは関係ありません -- ですから、時間をかけて勉強しないでください!
関数の宣言は次のとおりです (PACBalances.h 内)。
上記の「構造体」を「クラス」に変更しようとしたが、効果がないことに注意してください。
呼び出しコードは次のとおりです (cpputest テスト ファイル内)。
そして、演算子関数自体の定義は次のとおりです。
その点に注意してください:
- コンパレーターと typedef された multimap は、多くのコードで美しく機能します (上記には示されていません)。
- テスト ファイルは、その .h ファイルで宣言および定義された他の多くの関数を呼び出しますが、別の .cpp ファイルで定義された関数を呼び出すのはこれが初めてです。
- 私の質問は、「onesy.insert」呼び出しに比較機能が必要な理由ではありません。という事は承知しています。実際にコンパレーターを使用するテスト セットでコード化した最初のマルチマップ操作です。
色々予感はありますが、尽きてしまったので、どなたかご存知の方がいらっしゃれば教えていただけるとありがたいです。
ノルム