Вы можете использовать Отражение или Dictionary<string, Action>
.
Предполагая, что у вас есть такие тестовые классы:
namespace MyTests
{
public class Test1
{
public static void Test() { }
}
}
Вызовите тест, используя Reflection:
Найдите класс и метод, используя отражение, и назовите его:
Assembly.GetExecutingAssembly().GetType("MyTests.Test1")
.GetMethod("Test").Invoke(null, null);
Вызовите тест, используя словарь :
Инициализируйте Dictionary<string, Action>()
следующим образом:
Dictionary<string, Action> tests = new Dictionary<string, Action>();
tests.Add("Test1", () => Test1.Test());
tests.Add("Test2", () => Test2.Test());
Затем вызывайте по имени, когда вам нужно:
tests["Test1"]();
Объедините оба отражение и словарь :
Или вы можете комбинировать как для повышения производительности, так и для упрощения инициализации. Найти все тесты при запуске, используя отражение один раз:
Dictionary<string, Action> tests = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.FullName.StartsWith("MyTests.Test"))
.Select(t => t.GetMethod("Test"))
.ToDictionary(m => m.DeclaringType.Name,
m => new Action(() => m.Invoke(null, null)));
Запускать, когда вам нужно:
tests["Test1"]();
tests["Test2"]();