ユニットテスト

テストは、安定した、バグのないアプリケーションを確実にする素晴らしい方法です。 それはインタラクティブなドキュメントとしての役割をはたし、 機能を破壊してしまうことを恐れずにコードを修正することを可能にします。 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);
}

掘り下げる

rdmd playground.d