0 Tage Serie
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 libraries
public class MockUserRepository : IUserRepository
{
public Func<int, string> GetUsernameStub = _ => "Default";
public string GetUsername(int id) => GetUsernameStub(id);
}
// Test usage
var 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.