0 Tage Serie
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 Context
var 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.