Derzeit gibt es in einem Teil meines Projekts ein Domain-Objekt wie folgt:
%Vor%Die District-Eigenschaft ist eine berechnete Spalte in der Datenbank. Aufgrund der Anforderungen des Datenzugriffsanbieters (Entity Framework) wird ein privates Set benötigt. Dies ist im normalen Programmablauf kein Problem, da der Bezirk nie eingestellt werden muss, da er aktualisiert wird, wenn ein Adressdatensatz in der Datenbank gespeichert / aktualisiert wird.
Eine Methode, die ich testen möchte, sieht so aus:
%Vor%Das verursacht Probleme, wenn ich versuche, die addressToMatch-Variable einzurichten, da ich die District-Eigenschaft nicht festlegen kann und daher kann ich keinen Test schreiben, um zu überprüfen, ob die richtigen übereinstimmenden Adressen zurückgegeben werden.
Wie sollte ich ein Adressobjekt für diesen Test einrichten?
Dies funktioniert sofort, wenn Sie Moq verwenden (wozu die Frage gehört, also nehme ich an, Sie sind es):
%Vor%Ein vollständigeres Beispiel ist also:
%Vor%Dies gibt den erwarteten Wert aus:
%Vor% Zuerst eine wilde Vermutung: vielleicht eine Kombination aus der Deklaration von District
propery als protected internal
plus das Hinzufügen eines assembly:InternalsVisibleTo
-Attributs zu Ihrer "Domänen" -Assembly, so dass Distinct
aus Ihren Tests gesetzt werden kann.
Alternativ können Sie der Klasse Address
einen internen Konstruktor hinzufügen, der den Wert der Eigenschaft District
festlegt. Und noch einmal, kommentieren Sie Ihre "Domain" -Assembly mit assembly:InternalsVisibleTo
.
Tags und Links c# unit-testing moq access-modifiers encapsulation