csharp / expert
Snippet
Entkoppelte Unit-Verifizierung durch unsichere private Verknüpfung
C# 12 führte UnsafeAccessor ein, was eine hochperformante Möglichkeit bietet, auf private Member für Tests zuzugreifen. Im Gegensatz zu Reflection wird dies vom JIT-Compiler geprüft und hat keinen Runtime-Overhead, ideal für die Verifizierung interner Zustände.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System.Runtime.CompilerServices;public class InternalVault{private string _secretToken = "init_v1";}public static class VaultInspector{[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_secretToken")]public static extern ref string GetToken(InternalVault vault);}// Test Contextvar vault = new InternalVault();ref string token = ref VaultInspector.GetToken(vault);token = "overridden_for_test"; // Direct private field modification
Erklärung
1
[UnsafeAccessor(UnsafeAccessorKind.Field, Name = "_secretToken")]
Weist den Compiler an, diese externe Methode mit einem privaten Feld zu verknüpfen.
2
public static extern ref string
Gibt eine Referenz auf das Feld zurück, was sowohl Lesen als auch Schreiben ermöglicht.