Create a playlist of test methods that have the same workitem identifier in Microsoft test explorer

I have a test suite in Microsoft test manager. Each test is mapped to a specific WorkItem identifier. I want all tests to have the same workitem identifier together as a playlist. The following is an example sample test.

[TestMethod] [TestCategory("Cat A")] [Priority(1)] [WorkItem(5555)] public void SampleTest() { Do some thing } 

I tried, but could not create a playlist by Workitem id. Please suggest if possible.

+5
source share
1 answer

You will need to use reflection.
Get your class type, get its methods, then find those that have the correct attribute.

 MethodInfo[] methods = yourClassInstance.GetType() .GetMethods()).Where(m => { var attr = m.GetCustomAttributes(typeof(WorkItem), false); return attr.Length > 0 && ((WorkItem)attr[0]).Value == 5555; }) .ToArray(); 

Please note that you can check multiple attributes if you wish.
Then you need to use an instance of the parent class as the target to run these methods.

 foreach (var method in methods) { method.Invoke(yourClassInstance, null); } 

If your methods have parameters, replace null with object[] containing the parameters.

Here is a complete working example:

 using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace ConsoleApplication7 { public class MyAttribute : Attribute { public MyAttribute(int val) { Value = val; } public int Value { get; set; } } class Test { [MyAttribute(1)] public void Method1() { Console.WriteLine("1!"); } [MyAttribute(2)] public void Method2() { Console.WriteLine("2!"); } [MyAttribute(3)] public void Method3() { Console.WriteLine("3!"); } [MyAttribute(1)] public void Method4() { Console.WriteLine("4!"); } } class Program { static void Main(string[] args) { var test = new Test(); var types = Assembly.GetAssembly(test.GetType()).GetTypes(); MethodInfo[] methods = test.GetType().GetMethods() .Where(m => { var attr = m.GetCustomAttributes(typeof(MyAttribute), false); return attr.Length > 0 && ((MyAttribute)attr[0]).Value == 1; }) .ToArray(); foreach (var method in methods) { method.Invoke(test, null); } } } } 
+2
source

All Articles