Wie kann ich geschützte Einheiten testen, die nur von NHibernate gesetzt werden sollen?

7

Ich verwende NHibernate, um diese Entität persistent zu machen:

%Vor%

Beachten Sie, dass die Eigenschaft Id über einen geschützten Setter verfügt. Dadurch wird verhindert, dass Benutzer Id ändern, während NHibernate ihm weiterhin ein Id beim Speichern in der Datenbank zuweisen kann.

In einem meiner Komponententests verwende ich Moq mit dem folgenden Code, um mein Repository nachzuahmen:

%Vor%

Wenn ich Moq anrufe, eine neue Store -Instanz zurückzugeben, kann ich die ID nicht zuweisen, und der Komponententest schlägt fehl. Wie kann ich diese Eigenschaft testen? Ich möchte die Zugriffsebene der Eigenschaft nicht ändern, da ich nicht möchte, dass Benutzer sie manuell ändern, und genau das muss ich hier tun, um sie zu testen.

    
Daniel T. 24.09.2010, 03:59
quelle

4 Antworten

8

Wenn Sie die Store-Klasse nicht wirklich testen, dann sollten Sie sich das vorstellen und die SetupGet-Methode verwenden:

%Vor%     
arootbeer 24.09.2010, 04:30
quelle
10

Um dies als einen anderen Ansatz auszugeben, könntest du den Setzer protected internal :

machen %Vor%

und verwenden Sie das Attribut InternalsVisibleTo :

%Vor%     
Jeff Ogata 24.09.2010 05:12
quelle
3

Erstellen Sie im Testprojekt eine Kindklasse von Store , die eine Anpassung der geschützten Eigenschaften ermöglicht.

%Vor%

Richten Sie dann die zu verwendenden Komponententests ein, um diese Instanz zurückzugeben, wenn Sie ein Store -Objekt erstellen müssen.

%Vor%     
JaredPar 24.09.2010 04:14
quelle
1

Sicherlich nicht der beste Ansatz, aber Sie könnten auch die Reflektion verwenden, um die Eigenschaft wie in Tests von Sharp Architecture .

    
DanP 24.09.2010 19:55
quelle