2012-09-04 28 views
-1

我需要找到測試用例失敗的數量。這裏TC003包含(3個SUB測試用例),其中2通過,1失敗。 (3)失敗 - (1)。我該如何做到這一點。我們如何使用c#將列表分組?

TC001-Passed 
TC002-Passed 
TC003-Passed 
TC003-Passed 
TC003-Failed 
TC004-Passed 

我有一個DataTable即ItemArray[0]包含TestCaseID和ItemArray[3]包含狀態

+2

這些任意字符串還是它們在自定義對象內? –

+0

您可以使用Linq對象 –

+1

我有一個dataTable ie.ItemArray [0]包含TestCaseID和ItemArray [3]包含狀態 – Pat

回答

1

好吧,這是尷尬的,但讓我們直截了當:

void Main() 
{ 
    List<string> AllTheTestCasesStrings = new List<string>(); 
    AllTheTestCasesStrings.Add("TC001 Passed"); 
    AllTheTestCasesStrings.Add("TC002 Passed"); 
    AllTheTestCasesStrings.Add("TC003 Passed"); 
    AllTheTestCasesStrings.Add("TC003 Passed"); 
    AllTheTestCasesStrings.Add("TC003 Failed"); 
    AllTheTestCasesStrings.Add("TC004 Passed"); 

    List<TestCase> AllTheTestCases = new List<TestCase>(); 

    foreach(string CurrentTest in AllTheTestCasesStrings) 
    { 
     TestCase NewTest = new TestCase(); 
     NewTest.Name = CurrentTest.Split(' ')[0]; 
     NewTest.Passed = CurrentTest.Split(' ')[1].Equals("Passed"); 

     AllTheTestCases.Add(NewTest); 
    } 

    int FailedTestCases = AllTheTestCases.Where<TestCase>(x => !x.Passed).GroupBy<TestCase, string>(x => x.Name).Count(); 
    int PassedTestCases = AllTheTestCases.Where<TestCase>(x => x.Passed).GroupBy<TestCase, string>(x => x.Name).Count(); 

    Console.WriteLine("Failed: " + FailedTestCases); 
    Console.WriteLine("Passed: " + PassedTestCases); 
} 

public class TestCase 
{ 
    public string Name; 
    public bool Passed; 
} 
+0

ID'TC003'的3個測試用例應該組合在一起。你將返回1失敗的結果,5通過,這是不正確的。 – mellamokb

+0

@mellamokb現在我明白了,感謝您的反饋。我正在看看它現在 –

+0

你不能只是做.... AllTheTestCases = AllTheTestCases.Distinct()。ToList();? –

1

假設你有LINQ提供,你可以嘗試這樣的解決方案,其中dt是您的數據表,其中列索引0爲testcase-id(1,2,3,4),並且列索引3爲狀態(PassedFailed):

var rows = dt.Select(); 
var results = rows.GroupBy (r => r[0]) 
    .Select (r => new { 
     TestCaseID = r.Key, 
     Status = r.Any (x => x[3].Equals("Failed")) ? "Failed" : "Passed" 
    }); 

var total = results.Count(); 
var passed = results.Count(r => r.Status == "Passed"); 
var failed = results.Count (r => r.Status == "Failed"); 

Console.WriteLine("Total Testcases: " + total); // 4 
Console.WriteLine("Passed: " + passed);   // 3 
Console.WriteLine("Failed: " + failed);   // 1 
1

我有一個DataTable即ItemArray [0]包含TestCaseID和 ItemArray [3]包含狀態

好吧,這裏有一個DataTable和Linq-To-DataSet的方法:

var tcaseGroups = tbl.AsEnumerable() 
    .GroupBy(r => r.Field<String>("TestCaseID")) 
    .Select(g => new 
    { 
     Testcase = g.Key, 
     Count = g.Count(), 
     CaseInfo = g.GroupBy(r => r.Field<String>("Status")) 
        .Select(gStatus => new 
        { 
         Status = gStatus.Key, 
         Count = gStatus.Count() 
        }) 
    }); 

// output the result 
foreach (var x in tcaseGroups) 
    Console.WriteLine("Testcase:{0}, Count:{1} Results:[{2}]", x.Testcase, x.Count 
     , String.Join(",", x.CaseInfo.Select(xx => 
      String.Format("Status:{0} Count:{1}", xx.Status, xx.Count)))); 
1

使用Linq按ItemArray [0]分組,然後計數ItemAr的實例射線[1]。

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace ConsoleApplication 
{ 
    internal class Program 
    { 
     private static void Main() 
     { 
      //table to mimik your structure 
      var table = new List<string[]>(new[] 
       { 
        new[] {"TC001", null, null, "Passed"}, 
        new[] {"TC002", null, null, "Passed"}, 
        new[] {"TC003", null, null, "Passed"}, 
        new[] {"TC003", null, null, "Passed"}, 
        new[] {"TC003", null, null, "Failed"}, 
        new[] {"TC004", null, null, "Passed"} 
       }); 

      //calculate 
      var grouped = from itemArray in table 
          //group by the testid 
          group itemArray by itemArray[0] 
          into g select new 
           { 
            TestCaseId = g.Key, 
            //add up the passes and fails 
            PassedCount = g.Count(i => i[3] == "Passed"), 
            FailedCount = g.Count(i => i[3] == "Failed") 
           }; 

      //enumerate and output to screen 
      foreach (var group in grouped) 
      { 
       Console.WriteLine("TestCase {0} Passed: {1}, Failed: {2}", 
            group.TestCaseId, group.PassedCount, 
            group.FailedCount); 
      } 
      Console.ReadLine(); 
     } 
    } 
} 
相關問題