.NETのユニットテスト(Nunit)入門(一)

3861 ワード

1.基礎概念
1.1ユニットテスト
ユニットテスト:プログラムのユニットモジュールに対するテスト(メソッド、タイプ、論理ユニット、論理ブロック)
          notes:  
                 (1). ユニットテストはユニットモジュールが完了した後に行われるが、テスト例はユニットモジュールが完了する前に決定されることが多い.
                 (2). TDD(テストドライバ開発):需要が確定したら、テスト用例の作成を開始します.後続の編集作業は徐々にテストを
使用例がすべて合格すると、開発作業が完了し、ユニットテストも終了し、モジュールがすぐに提供されます.
ユニットテストのメリット:
                 1. 検証モジュール機能:各機能はテストによって正確性を保証する
                 2. システム設計の最適化:プログラムのデバッグとテストが容易で、ソフトウェアの結合を解除
                 3. 別のドキュメント方法:関数/クラスがどのように使用されるかを示す最適なドキュメント
                 4. 回帰性あり:作成が完了し、迅速なテストが可能
 
2.TDD開発方式の流れ
2.1ドライバ開発の基本手順のテスト
       (1).現在完了する機能を明確にし、機能リストに記録できます.
       (2).この機能のテスト例をすばやく作成
       (3).テストコードのコンパイルに失敗しました
       (4).対応する機能コードの作成
       (5).テストに合格
       (6).コードを再構築し、テストに合格することを保証します.
       (7).すべての機能の開発をサイクルで完了
     
2.2 TDDの具体例
需要:文字列を受け入れて反転します(StringReverseタイプでこの機能を実現できます).
設計:StringHandlerという名前のタイプを定義すると、文字列の内部メンバーが含まれ、共通のメソッドが公開されます.
Reverseは、反転の結果を格納する文字列タイプのオブジェクトを返す反転を実現します.
テスト例:
// 

[Test]

public void TestStringRevertNormal()

{

    String input="abcde";

    StringHandler handler=new StringHandler(input);

    String result=handler.Reverse();

    // 

    Assert.AreEqual("edcba",result);

     Assert.AreEqual("edcba",result);

}

        
解析:上記の例では、タイプの一般的な機能をテストしました.文字列を反転します.
テスト・インスタンスは、同じモジュールの機能に影響を及ぼさないように、同じテスト・メソッドを2回連続して呼び出します.
通常のプロセスのテスト例を書き終わったら、境界テストをする必要があります.
             1).入力パラメータがnullの場合、このタイプはArgumentExceptionタイプの例外を放出することが望ましい.
/// <summary>

///  , ArgumentException 

/// </summary>

[Test, ExpectedException(typeof(ArgumentException))]

public void TestStringRevertNullArgument()

{

   String input=null;

   // 

   StringHandler handler=new StringHandler(input);

}

         2).入力されたパラメータが空の文字である場合、所望の結果も空の文字列を返します.
///<summary>

/// 

///</summary>

[Test]

public void TestStringRevertEmptyArgument()

{

  String input = String.Empty;

  StringHandler handler=new StringHandler(input);

  String result=handler.Reverse();

  Assert.AreEqual(String.Empty,result);

}

      
これにより、すべての機能と境界をカバーするテスト例がほぼ書き終わり、次にプログラムのアーキテクチャを記述して、これらのすべての例をコンパイルすることができます.ここでは、アーキテクチャのみを記述し、機能実装の符号化は行わない.
 
///<summary>

//////</summary>

class StringHandler

{

    public StringHandler(String input)

    {

        // 

    }

    public String Reverse()

    {

        // 

        return String.Enpty;

    }

}