ここ StackOverflow でかなりのスレッドを読んだ後、何らかの形のテスト駆動型開発/単体テストを採用する (または少なくともその領域を調査する) 必要があるという結論に達しました。
Linux での C コードについて話しているので、チェックを試してみることにしました (これが正しい選択かどうかはわかりませんが、うまくいかない場合は、後でいつでも別のことを試すことができます)。
しかし、この単体テストと単体テスト フレームワークの概念は私にとってまったく新しいものだったので、非常に小さなテスト コードで単体テストを実行することから始めました (しかし、とにかく完全に道に迷い、何かが足りないように感じました)。
これは私がこれまで行ってきたことであり、次のファイルを作成しました。
- main.c は、my_pow という関数のみを呼び出して結果を出力するメインです。
- my_pow.c には、関数 my_pow が含まれています。
- my_pow.h
- my_pow_test.c、ここに my_pow 関数のユニット コードを配置する必要があると考えました。
(したがって、「通常のプログラム」は main.c、my_pow.c、および my_pow.h です。)
これは my_pow.c です
#include "my_pow.h"
int my_pow(int a, int b)
{
return (a*b);
}
次に、 my_pow_test.c に次のようなものを入れることにしました。
#include <check.h>
#include "my_pow.h"
START_TEST (test_my_pow)
{
/* unit test code */
}
END_TEST
//do I need some sort off main here that calls test_my_pow?
これは基本的にチェックマニュアルの 3.1 章と同じですが、それでも違います....
誰かが私を正しい方向に押してくれませんか?
ありがとうヨハン
更新: check を使用しようとした理由はありません。どこかから始めるべきだと思っただけです。おそらく CUnit の方が良い選択です (私もそれを試してから、知識に基づいた選択をすると思います)。
更新: オンライン ドキュメントが真実の半分にすぎないことを間接的に指摘してくれた @philippe に感謝します。ドキュメントの内容を明確にするサンプル コードは、チェック パッケージと共に既にインストールされています。Ubuntu の場合 /usr/share/doc/check/example/tests/
更新: コード例は、彼の最初のバージョン、次に 2 番目のバージョンなどを見ることから始められるように作成されました。そのため、彼が非常に基本的なテスト ケース/コードを何もないところから何かに役立つものまで作成する方法をたどることができます。伝統的なTTDの方法。
私のコードは壊れていたので、単体テストでこれを証明したかったので、少しごまかして、実際の pow 関数に対してテストしました。このようなもの:
START_TEST (test_my_pow1)
{
int resultat = my_pow(3,3);
int math = pow(3,3);
fail_unless ( resultat == math,
"Error on 3^3 != %d (%d)",math, resultat);
}
ただし、将来的には、すでに標準ライブラリにあるものを再現しません:-)
関連している:
検索から取得[c] [unit-testing]
。