1

我有幾個用C#編寫的測試項目。我需要創建一個新的應用程序(可以是控制檯或WPF應用程序),它需要引用測試項目並動態地找出所有測試方法名稱。如何動態查找所有測試方法(編碼的UI)?

到目前爲止,我能夠找到所有測試項目中的所有方法和屬性名稱,但我無法僅過濾測試方法名稱。我跳躍到能夠通過使用TestMethodAttribute篩選出測試方法,因爲所有測試方法都具有[TestMethod]屬性。但是它不能正確地完成這項工作。下面是代碼

 MethodInfo[] methodInfos = typeof(CodedUITest2).GetMethods(); 
     Array.Sort(methodInfos, 
        delegate(MethodInfo methodInfo1, MethodInfo methodInfo2) 
        {return methodInfo1.Name.CompareTo(methodInfo2.Name);}); 

     foreach (MethodInfo mi in methodInfos) 
     { 
      object[] al = mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute), false); 

      if (al != null) 
       Console.WriteLine(mi.Name); 

     } 

程序的輸出的提取 CodedUITestMethod3 Equals已 get_TestContext 的GetHashCode 的GetType set_TestContext 的ToString

所以,如果我刪除下面的語句,其結果是相同。

object [] al = mi.GetCustomAttributes(typeof(Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute),false);如果(al!= null)

所以我的問題是找到所有的方法名稱後,如何篩選結果並獲得唯一的測試方法,在這個例子中,它應該只打印「CodedUITestMethod3」?

回答

1

下面的代碼工作對我的箱子,

Type type = typeof(CodedUITest2); 
IEnumerable<MethodInfo> testMethods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public).Where(m => m.IsDefined(typeof(TestMethodAttribute))); 
相關問題