来週、ユニットテストとテスト駆動開発について私の部署に講演する予定です。その一環として、最近書いたコードから実際の例をいくつか紹介しますが、講演で書く非常に簡単な例をいくつか紹介したいと思います。
私はウェブ上で良い例を探してきましたが、開発分野に特に当てはまるものを見つけるのに苦労していました。私たちが作成するソフトウェアのほとんどは、小型のマイクロコントローラーで実行される埋め込み型の制御システムです。ユニットテストに簡単に適用できる多くのCコードがあります(ターゲット自体ではなくPCでユニットテストについて説明します)。「下」の層から直接離れている限り:直接話すものマイクロコントローラー周辺機器に。しかし、私が見つけたほとんどの例は文字列処理に基づいている傾向があります(たとえば、優れたDive Into Python Romanの数字の例)。文字列を使用することはほとんどないため、これは実際には適切ではありません(コードが通常使用する唯一のライブラリ関数について)ありmemcpy
、memcmp
そしてmemset
、strcat
または正規表現は正しくありません)。
では、質問に答えてください。ライブセッションで単体テストのデモンストレーションに使用できる機能の良い例を提供してくれる人はいますか?私の(変更される可能性がある)意見での適切な答えは、おそらく次のとおりです。
- 誰でも(たまにコードを書くだけでも)理解できるほど単純な関数。
- 無意味に見えない関数(つまり、パリティまたはCRCを計算することは、おそらく2つの数値を乗算してランダムな定数を追加する関数よりも優れています)。
- 人の部屋の前に書くのに十分短い関数(エラーを減らすためにVimの多くのクリップボードを利用するかもしれません...);
- 文字列を処理するのではなく、数値、配列、ポインター、または構造体をパラメーターとして受け取り、類似のものを返す関数。
- 単純なエラー(例えば)
>
ではなく、簡単に入力できる関数は、>=
ほとんどの場合は動作しますが、特定のエッジケースで破損する可能性があります。ユニットテストで簡単に識別および修正できます。
何かご意見は?
おそらく関連性はありませんが、テスト自体はおそらくGoogle Test Frameworkを使用してC ++で記述されます。すべてのヘッダーには既に#ifdef __cplusplus extern "C" {
ラッパーがあります。これは、これまでに行ったテストでうまく機能しました。