2009-08-26 7 views
0

私は、foreachを使ってコレクション内のすべてのアイテムに対してメソッドを実行するユニットテストをしています。 現在、メソッドが正しい値を返したかどうかをテストするforeachの最後にアサーションがあります。 これは動作しますが、メソッドが初めて失敗するとテストが失敗します。コレクション内のサブアイテムはテストされません。Visual Studio 2008でコレクションに対して繰り返し単体テストを繰り返すことはできますか?

私は本質的に、コレクション内の各アイテムについて本格的なテストを実行したいと考えています。テストが失敗しても、すべての項目に対してテストが実行されます。テスト結果ウィンドウには、各パスの結果データが表示されます。

データソースを使用してデータベースの各行に対してテストを実行できますが、この場合は便利ではありません。別の方法がありますか?

public void TestXHTMLBlock() 
     { 
      foreach (XmlNode current in Test_Cases.SelectNodes("Test_Cases/Test_Case")) 
      { 
       XHTMLBlock x = new XHTMLBlock(current.SelectSingleNode("Input").CreateNavigator(), ""); 
       XmlDocument temp = new XmlDocument(); 
       temp.LoadXml("<Output>" + x.sWordML(false) + "</Output>"); 


       XmlDiff diff = new XmlDiff(XmlDiffOptions.IgnoreComments | 
            XmlDiffOptions.IgnoreDtd | 
            XmlDiffOptions.IgnoreNamespaces | 
            XmlDiffOptions.IgnorePI | 
            XmlDiffOptions.IgnorePrefixes | 
            XmlDiffOptions.IgnoreWhitespace | 
            XmlDiffOptions.IgnoreXmlDecl); 

       StringBuilder str = new StringBuilder(); 
       XmlWriter xwrite = XmlWriter.Create(str); 

       bool ret = diff.Compare(current.SelectSingleNode("Output"), temp.SelectSingleNode("Output"), xwrite); 
       xwrite.Close(); 

       Assert.IsTrue(ret, current.SelectSingleNode("Description").InnerText); 
      } 
     } 

私は、これはXMLデータソースのための最有力候補のように見えますけど、私は仕事にそれを得ることができない。

私の現在のテストは次のようになります。 Inputタグには、データソースが解析しようとするXMLが含まれています。つまり、私のテストでは正しくアクセスできず、入力XMLの一部にデータソースパーサのチョークがあります。データソースのXMLパーサーに内部XMLをテキストとして扱うように指示することができれば、それは同様に機能します。

+0

あなたが現在持っているものを投稿して、あなたが見ているもののよりよいアイデアを得ることができますか? – JasCav

答えて

1

個々のアイテムをテストした結果をコレクションに入れ、foreachの後にアサートします何かを含んでいる。以下にそのアイデアを示すためのサンプルコードスニペットを示します。あなたは、テストが失敗したときに詳細を確認したい場合は

List<Item> errors = new List<Item>(); 
foreach(Item item in items) 
{ 
    if(string.IsNullOrEmpty(item.Name)) 
    { 
    errors.Add(item); 
    } 
} 
Assert.IsTrue(errors.Count == 0,"There are items with no name"); 

することは、あなたは、エラーのコレクションを反復処理するユーティリティメソッドを書き、あなたは、あなたのアサートに使用できる詳細なメッセージを生成することができます。

0

nUnit 2.5.xを使用している場合は、ValueSourceAttributeがお探しのものである可能性があります。それは指示されたIEnumerableの各メンバーのために全テストを1回繰り返すでしょう。

0

私はStringBuilderを使用し、各エラーで文字列を追加することを検討します。終わり

あなたはStringBuilderのが空であるかどうかを確認してから、/デバッグ/トレースを慰めるためにあなたのユニットテストフレームワークが自動的に収集されているものとテストがAssert.Fail(経由失敗させ、それを書くことができます)または同様の

関連する問題