テストは、安定した、バグのないアプリケーションを確実にする素晴らしい方法です。
それはインタラクティブなドキュメントとしての役割をはたし、
機能を破壊してしまうことを恐れずにコードを修正することを可能にします。
Dは言語機能の一部として、便利でネイティブな
unittest
ブロック構文を提供します。ソースコードの機能をテストするために、
Dのモジュールのどこでもunittest
ブロックを使えます。
// 自作関数のためのブロック
unittest
{
assert(myAbs(-1) == 1);
assert(myAbs(1) == 1);
}
これは直接的に テスト駆動開発 の需要に応えます。
unittest
ブロックの実行unittest
ブロックはコマンドラインフラグ-unittest
がDMDコンパイラに渡された時に
コンパイルされ実行される任意のコードを含むことができます。DUBにもdub test
コマンドによって
ユニットテストをコンパイル、実行する機能があります。
assert
によるサンプルの検証典型的なunittest
は与えられた関数の機能をテストするassert
式を含みます。
unittest
ブロックは典型的にはソースのトップレベルか、
クラスや構造体にある関数の定義の近くに置かれます。
ユニットテストは堅牢なアプリケーションを作るための強力な武器です。
テストによってプログラムがどれくらいカバーされているかをチェックする
一般的な測定法は、コードカバレッジです。それは存在するコードの行に対する実行された行の比率です。
DMDコンパイラでは-cov
と付け加えることで簡単にコードカバレッジレポートの生成ができます。
すべてのモジュールの詳細な統計が含まれる.lst
ファイルが生成されます。
コンパイラはテンプレート化されたコードの属性を自動的に推論することができるため、 テストされたコードのためにそのような属性を確保するために注釈付けされたユニットテストを追加することは 一般的なパターンです:
@safe @nogc nothrow pure unittest
{
assert(myAbs() == 1);
}