I have a test suite in Microsoft test manager. Each test is mapped to certain WorkItem ID. I want to run all tests having same workitem id together as a playlist. Below is exmaple of sample test.
[TestMethod]
[TestCategory("Cat A")]
[Priority(1)]
[WorkItem(5555)]
public void SampleTest()
{
Do some thing
}
I tried but was not able to make a playlist by Workitem id. Please suggest if it is possible to do so.
You will have to use reflection.
Get your class's type, get its methods then search for those that have the correct attribute(s).
MethodInfo[] methods = yourClassInstance.GetType()
.GetMethods()).Where(m =>
{
var attr = m.GetCustomAttributes(typeof(WorkItem), false);
return attr.Length > 0 && ((WorkItem)attr[0]).Value == 5555;
})
.ToArray();
Note that you can check multiple attributes if you'd like.
You then only have to use an instance of the parent class as a target for launching these methods.
foreach (var method in methods)
{
method.Invoke(yourClassInstance, null);
}
If your methods have parameters, replace null
with an object[]
containing the parameters.
Here's a full working example for you to try:
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);
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With