単体テストをしたいと思って、CppUnitとかちょっと調べたんですが、
めちゃめちゃ面倒そうですね。
D言語みたいに、テストするクラスにちょこっとテスト用のメソッドを書いておくと、
それをCppUnit用に変換するプリプロセッサー?みたいのってないんでしょうか?
なんかテスト用にわざわざクラス書いてたらそこでバグりそうですw
あと、できれば、D言語みたいな感じで、メソッドの事前・事後条件とか、
クラスの不変条件のテストもしてみたいんですが、なるべく簡単な方法ってないです
か?
一応、VC.NET2003です。
> 単体テストをしたいと思って、CppUnitとかちょっと調べたんですが、
> めちゃめちゃ面倒そうですね。
それほどでもないけど…
> あと、できれば、D言語みたいな感じで、メソッドの事前・事後条件とか、
> クラスの不変条件のテストもしてみたいんですが、なるべく簡単な方法ってないです
> か?
DigitalMars C++ で単体テスト ^^;
# タダだし
すばやい回答ありがとうございます。
>DigitalMars C++ で単体テスト ^^;
DMC++とVCでソースが完全に互換になるなら、
別に、それでもいいんですが、、やっぱりコンパイラが2つあるのは面倒そうですね。
http://www.unittest.org/
ってどこ行っちゃたんですか?
あれ使えば、ちょっとは便利になるんですか?
ページが見つからなくていまいち、何が便利になるのかがよく分からなかったり。。
これは、επιστημηさんに聞くことなのかよく分かりませんが。
そういえば、codeprojectでおもしろい記事を見つけました。
http://www.thecodeproject.com/macro/DbC_and_Doxygen.asp
けっこう便利そうかも。
> http://www.unittest.org/
> ってどこ行っちゃたんですか?
サーバーが落ちてるポ。
ごめんなさい、僕の管理下にないんです。
> あれ使えば、ちょっとは便利になるんですか?
河童のことですか? テストの雛形を吐いてくれます。
cocuppa --skeleton FooTest test1 test2 test3
とかやると、空のテスト項目 test1,test2,test3 を持った
クラス FooTest のソースを生成します。
ちゃんとCppUnitのクラス構成とか使い方を理解すれば、
ちっとも面倒ではないですよ。
面倒だと感じるのは多分実際にやってみていないからだと思います。
ほとんどの部分は自動化されていて実際にやらなくてはならないのは、
ユーザー側に起因する部分だけです。
(この部分を自動化するが無理なのは自明の理ですね)
CppUnitの肝は同じテストを繰り返して行うときにこそ発揮されます。
リファクタリングした時の再テストや機能追加した時の既存部分の再テストなどで
ありがたさが解ると思いますよ。
後はテストファーストで組む時はCppUnitは必須になるのではないかと思います。
CppUnitも万能ではありませんし、使い道を間違えるとかえって大変なだけに
なってしまうので何でもかんでもCppUnitというのもこれまた拙いと思います。
D と比較されたら大抵の xUnit は面倒では?(方針が微妙に違う)
DbC と UnitTest とは検証する対象が異なりますしね。
D言語の場合、言語レベルでサポートされているわけで
ある意味コンパイラの実装次第で何でもありな訳ですけれど、
通常のxUnitは外部提供のライブラリな訳でこれを同列に比べられてもなぁと。
επιστημηさんも書かれているようにDbCはまた別物ですしねぇ。
ただ、何のフレームワークもない状態で書くよりは数段便利になってますし、
私自身の感想としては、そこまで言うのは贅沢なんではないかなと感じてしまいます。
xUnitはそれ自体は良くできていると思いますし、考え方もさほど難しくないと
思うのでこれで面倒と言われたらどうしようもないよなぁと。
επιστημηさんの河童にしても最終的なテストコードは自分で書かねばならない
訳ですし、その部分は避けて通れませんからね。
少なくとも私はVC++でもっと楽なのを言われても知らないです。
もしあるなら教えてほしいです。
試してみたいです。
DのDbCであっても、pre/post-conditionとinvariantは自分で書くんだし。