C#~NUnitユニットテスト

5228 ワード

0.ユニットテスト


ユニットテスト(Unit Test)のテスト例(Test Case)は、小さなプログラム機能の動作が正常であるかどうかをテストするための小さなセグメントコードであり、開発された機能サブアイテムが正しく完成し、その基本機能を実現することを保証する.1つのユニットテストは、特定の条件下で特定の関数の動作を判断するために使用される.ユニットテストは機能コードと一緒のツールであり、インタフェース向けのプログラミング方法とMock技術を組み合わせて、コードのテスト性を大幅に向上させる.・ホワイトボックステスト:テストユニットの内部構造;・ブラックボックステスト:テストユニットの機能と観測可能な挙動;

1.NUnitとは何か


NUnit無料オープンソース(http://www.nunit.orgユニットテストフレームワーク(.Net専用のホワイトボックステストアーキテクチャ)とテスト実行プログラム(test runner)のセットを提供します.ここでtest tunnerは、[TestFixture]属性を持つクラスおよびクラスの[Test]メソッドを探すために使用されます.  

2.TDD思想


機能コードが完成する前に、先進的な行テストコードの作成;テストは機能コードに着目すべきではなく,設計に着目すべきである.TDDを定義する2つの原則:・ 失敗した自動テストがない限り、単行コードを書かないでください.・重複を阻止する.

3.NUnitの使用


テスト原則・信頼性、メンテナンス性、可読性;・1ユニットテストは一連の方法呼び出しと断言であるべきである.・重複コードを避ける;・試験分離、低結合、異なる試験間の相互影響を防止する;NUnit属性のすべてのNUnit属性はNunitに含まれる.Frameworkネーミングスペースでは、プログラムセットNunitを参照する必要があります.Framework.dll.プロジェクトのテストでは、データベースリンクを使用する場合があります.一般的には、データベースリンクをWebに直列に配置します.コンフィギュレーションファイルにシステムを通します.Configuration.ConfigurationSettings.AppSettings[“DBConnectionString”].ToString(); 取得しますが、テストではこの値は読めません.テスト時にリンクを固定文字列に書きます.・TestFixture修飾試験クラス.クラスはpublicであり、デフォルトのコンストラクション関数が必要です.・Test修飾試験方法.テストメソッドの戻り値はvoidでなければなりません.・TestCase修飾試験方法.タグメソッドにはパラメータがあり、テストに必要なパラメータがあります.[TestCase(パラメータリスト)]・ Valueタグは、試験方法の一連のパラメータとして使用される.・ Combinatorial試験時に試験する必要がある様々な可能な組み合わせ;[Test,Combinatorial]public void TestFunction 01([Values(1,2,3)]int val,[Values("you","hi")]string str){}・各テストメソッドは、環境の確立/クリーンアップ、初期化/解放のために呼び出される前/後に実行されます.属性は任意のベースクラスから継承され、修飾された方法はpublicでなければならない.・ [TestFixtureSetUp/TestFixtureTearDown]OneTimeSetUp/oneTimeTearDown修飾方法、テストケース初期化/リソース解放関数.任意のテストメソッドが呼び出される前/後に実行され、データベース接続など[TestFixture]クラス全体に作用する構造/構造関数と同様に、修飾されたメソッドはpublicである必要があります.SetUp/TearDown方法はテストの隔離性を達成する目的を提供する:SetUpは共有する資源が各テストの運行前に正しく初期化することを確保し、TearDownは運行テストによる残留副作用がないことを確保する.TestFixtureSetUp/TestFixtureTearDownも同様に同じ目的を提供しているが、SetUp/TearDownメソッドの前/後にある.・Ignoreはクラスまたは方法を修飾し、テストが正常に行われることを保証する前提の下で、一時的に動的にいくつかのテスト方法を無視する.[Ignore("ヒント情報")]・ Category修飾クラスまたはメソッド、分類/グループ管理テストクラスまたはメソッド;[Category(ラベル)]
NUnitメソッドNUnitでは,Assert(断言)はクラスであり,断言はAssertクラスの静的メソッドである.断言はユニットテストの核心であり,クラス内の様々な方法で比較し,NUnitの断言に自分のエラー情報を追加することもできる.次の方法に注意してください.Fail():テストを直接失敗させる; · Assert.Ignore():テストを無視します. · Assert.AreEqual/AReNotEqual(object expected,object actual):パラメータexpectedとactualの値(タイプ)が等しいかどうかを比較します. · Assert.IsTrue/IsFalse(bool condition):条件断言テスト; · Assert.AreSame/AReNotSame(object expected,object actual):2つのパラメータが同じオブジェクトを参照しているかどうかを比較します.また、StringAssertクラス、文字列断言、文字列値のテスト方法もあります.1つのメソッドに複数のブレークスルーがある場合、ブレークスルーの実行に失敗し、その後のすべてのブレークスルーは実行されません.具体的には、NUnit~Assertクラス.
NUnit~テストセット管理NUnitの多くの機能は属性によって実現され、属性は.NETコンポーネントファイルのMetadataに追加された他のコンポーネントで読み取れる情報の一部は、中かっこで識別されます.NUnitは,テストコンポーネントのネーミングスペースと[TestFixture]と[Test]属性に基づいて異なるテストを分類する.・ 試験分類・ パケット運転
NUnit~Demoユニットテストプロジェクトファイル推奨ネーミング:プロジェクト名_Test、ソースファイルの基本構造は以下の通りです.
[TestFixture]
public class TestFunction
{
    [OneTimeSetUp]
    public void TestFixtureSetUp() { Console.WriteLine("OneTimeSetUp()"); }
    [OneTimeTearDown]
    public void TestFixtureTearDown() { Console.WriteLine("OneTimeTearDown()"); }

    [SetUp]
    public void SetUp() { Console.WriteLine("SetUp()"); }
    [TearDown]
    public void TearDown() { Console.WriteLine("TearDown()"); }

    [Test]
    public void TestMethod01() { Console.WriteLine("TestMethod01()"); }
    [Test]
    public void TestMethod02() { Console.WriteLine("TestMethod02()"); }
}

いくつかの方法の実行順序をテストします.OneTimeSetUp->SetUp->TestMethod 01->TearDown->SetUp->TestMethod 02->TearDown->OneTimeTearDownここでは、不足点の2番目の理解を組み合わせることができます.NUnit~シングルステップデバッグユニットテストのシングルステップデバッグ設定方法は、次のリンクを参照してください.http://www.cnblogs.com/ywqu/archive/2009/11/04/lindongshenghuo.html不足点1.xUnitアーキテクチャでは、JUnitは各メソッドをテストするときに新しいインスタンスを生成し、NUnitではTestFixtureでは1つのインスタンスのみを生成します.ユニットテストクラスを含むインスタンスデータを変更すると、他のテストメソッドに影響を与える可能性がありますが、JUnitは毎回インスタンスを生成します.  2. JUnitでは[SetUp]/[TearDown]はすべてのテストの前後に1回しか実行されませんが、NUnitは各テストの前後に1回実行され、JUnitでは[SetUp]/[TearDown]の効果を達成するために[TestFixtureSetUp]/[TestFixtureTearDown]属性を追加できます.

リファレンスリンク


[1]. ユニットテストの道(NUnitを用いる)[2].NUnitを用いてセルテストで構造関数依存注入を実現する[3].NUnitユニットテストチュートリアルおよびMockテスト