2016-07-08 10 views
0

おそらくウサギの穴を塞いでいますが、その価値はStackOverflowに尋ねて、専門家から意見を得ることです。Cで単体テストを書く正しい方法

ユニットテストを作成する正しい方法は何ですか?具体的には、同じプロジェクトから1つ以上の他の関数を呼び出す単体テスト関数がある場合... 他の2つの関数呼び出しをmockedするかどうかを指定します。

例:

単体テスト:AClassはで

[Test] 
    public void ReadZipFileContainer_Test() 
    { 
    AClass aObject = new AClass(); 
    string fileToRead = System.IO.Path.Combine(Directory.GetCurrentDirectory(), @"..\..\TestData\TestFile.zip"); 
    List<string> entityIds = new List<string>() { UtilsClass.kItemId }; 
    Dictionary<string, string> filesData1 = AClass.ReadFileContainer(fileToRead, entityIds); 
    Assert.AreEqual(filesData1.Count, 1); 
    } 

public Dictionary<string, string> ReadZipFileContainer(string fileToRead, List<string> itemIds) 
    {   
    Dictionary<string, string> fileContent = new Dictionary<string, string>();   
    try 
    { 
     Dictionary<string, string> entities = CClass.OpenContainer(fileToRead); // => call to another function. Should this call be mocked? 
     //Process   
    }   
    catch (Exception ex) 
    { 
     // We return empty directory after closing the container 
     logger.LogException(ex); 
     throw; 
    } 
    finally 
    { 
     CClass.CloseContainer(); 
    }   
    return fileContent; 
    } 

各個人が個人的な意見を持っていますが、私は最善の方法を探しています。どのように私たちが嘲笑を停止する必要がある行を決定する?

+0

私は何かを書いてポストしてしまった:O質問のパンとバターは意見に基づいているとは思わない - 単体テストは単体テストのテストである。あなたのユニットがコンクリーションに依存している場合、ユニットの外部に何か依存しているので、それは定義上、ユニットテストではありません。依存関係は抽象化されて単体テストを達成するために嘲笑される必要があります。 – Kritner

+0

ユニットテストとユニットテストの作成方法を定義するかなり厳しい規則があります。それらは実際に意見に基づくものではありません。ちょうど私の2c。 –

答えて

2

うわー、このような巨大な話題です。

あなたはあなたのコードが

  • テスト可能になりたい

    1. 場合に従うべきいくつかのルールがありますが、まともなユニットを書きたい

    ルールをテスト:これまであなたのクラスでのハードコードの依存関係を使用することはありません常に抽象化を使用し、DIを使用して依存関係を注入する。これは、物事を模倣する必要があるときに役立ちますし、物事を変更する必要があるときにも役立ちます。

    ユニットテスト:いくつかの基本的なルールは、次のようなここにあります

    理由は、あなたが終わるだろうということですディスク、外部API、データベースなどのファイルを意味し、実際のシステムに手を触れてはならない、あなたのユニットテスト多くの単体テストがあり、それらを非常に速くしたい、完了までに20分かかることはありません。多くのチームでは、コードが単体テストでカバーされ、既存の単体テストがすべて成功しない限り、コードのコミットを受け入れないというルールがあります。コミットするたびに20分待っていますか?

    あなたのテストが状態を共有していないことを確認してください。あなたのテストは、独立して実行でき、前のテストで設定したものに依存しないでください。

    何もアサートしていない単体テストを何回見ても想像もできません。

    もちろん、もっと基本的な原則に固執すれば、大丈夫です。

  • +0

    もしあなたが書いているのであれば、SOLIDの原則をもっと反映するようにコードが始まるかもしれません。インタフェースの抽出とコンポーネントのデカップリングを開始し、システムのさまざまな部分を偽造することができます。 – Fran

    関連する問題