csharp / expert
Snippet
Manuelles Mocking über Interface-Delegate-Stubs
Unit-Tests auf Expertenniveau vermeiden oft komplexe Mocking-Frameworks, um den Overhead zu reduzieren und die Testgeschwindigkeit zu erhöhen. Durch das Erstellen einer 'Stub'-Implementierung eines Interfaces, bei der Methoden öffentliche Delegaten aufrufen, kann man benutzerdefiniertes Verhalten direkt in den Testmethoden injizieren.
snippet.cs
csharp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface IUserRepository{string GetUsername(int id);}// Manual mock for testing without librariespublic class MockUserRepository : IUserRepository{public Func<int, string> GetUsernameStub = _ => "Default";public string GetUsername(int id) => GetUsernameStub(id);}// Test usagevar mock = new MockUserRepository { GetUsernameStub = id => "TestUser" };
Erklärung
1
public Func<int, string> GetUsernameStub
Ein Feld, das die Logik für die Methode enthält und es ermöglicht, diese pro Testfall auszutauschen.
2
GetUsernameStub = id => "TestUser"
Injiziert spezifisches Testverhalten in den Mock während der 'Arrange'-Phase eines Tests.