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.