Dでのもっとも直接的な単体テストの使い方としては、 契約の確認のための assert() が使用されます:
unittest
{
assert(x == 5);
}
そしてもし assert が失敗したら、AssertError 例外が送出され、
ランタイムライブラリがそれをcatchし、メッセージを表示して、
アプリケーションを終了します。
これが本質的な作業なのですが、より柔軟な処理を行いたいプログラマも いらっしゃるでしょう。例えば、 最初のエラーで停止するのではなく、 一回の実行で発生したすべてのエラーのログを取りたいかもしれません。
以下に、それを実現するアプローチをいくつか紹介します:
assert(e);の代わりに、
myassert(e, "message");と書いて、myassert() を全てのエラーを適切なログファイルへ出力するよう実装します。
extern (C) void _d_assert(char[] filename, uint line);_d_assert は、assert が引っかかったときに呼び出される関数です。独自の実装が提供されていると、 Phobosライブラリのものはリンクされなくなります。
import std.asserterror;
unittest
{
try
{
assert(...);
...
}
catch (std.asserterror.AssertError ae)
{
ae.print();
}
}
この方法では、assertをグループ化して、
どの範囲をスキップするかなどをコントロールすることができます。