0 Tage Serie
csharp / expert
Snippet

Automatisierte Suite-Inspektion via Reflexion

Experten-Tests beinhalten oft den Aufbau eigener Entdeckungsmechanismen. Die Verwendung von Reflexion zur Inspektion von Metadaten (Attributen) zur Laufzeit ermöglicht die Erstellung dynamischer Test-Runner, die keine hartcodierten Methodenaufrufe erfordern. Diese Technik ist grundlegend für das Verständnis der internen Funktionsweise moderner Testframeworks.

snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System.Reflection;
[AttributeUsage(AttributeTargets.Method)]
public class ExpertTestAttribute : Attribute { }
public class TestRunner
{
public void RunTests(object testInstance)
{
var methods = testInstance.GetType()
.GetMethods(BindingFlags.Public | BindingFlags.Instance)
.Where(m => m.GetCustomAttribute<ExpertTestAttribute>() != null);
foreach (var method in methods)
{
try
{
method.Invoke(testInstance, null);
Console.WriteLine($"Passed: {method.Name}");
}
catch (TargetInvocationException ex)
{
Console.WriteLine($"Failed: {method.Name} - {ex.InnerException?.Message}");
}
}
}
}
Erklärung
1
.Where(m => m.GetCustomAttribute<ExpertTestAttribute>() != null)
Filtert Klassenmethoden, um nur diejenigen zu finden, die mit einem spezifischen Metadaten-Marker versehen sind.
2
method.Invoke(testInstance, null)
Führt die Methode dynamisch auf der bereitgestellten Instanz aus, ohne die Methode zur Kompilierzeit kennen zu müssen.