2012-05-28 17 views

Odpowiedz

7

Sposób, aby uzyskać prywatnych pól lub metod w ogóle jest użycie refleksji. Jednak struktura testów jednostkowych obejmuje klasę pomocniczą, PrivateObject, aby było to łatwiejsze. Zobacz docs. Na ogół, gdy użyłem tego, ja skończyło się dokonanie rozszerzenia metody tak:

public static int GetPrivateField(this MyObject obj) 
{ 
    PrivateObject po = new PrivateObject(obj); 
    return (int)po.GetField("_privateIntField"); 
} 

Jeśli trzeba uzyskać pól prywatnych w klasie statycznej, jednak trzeba będzie przejść z prosto w górę odbicie.

+0

Dziękuję @mike Próbowałem go i działa dobrze. – Michelle

+0

@Michelle Nie ma za co. –

+1

Można uzyskać i ustawić prywatne pola w klasie statycznej za pomocą obiektu ['PrivateType'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx) (w przeciwieństwie do typu PrivateObject!) – stuartd

2

Nie. Jeśli piszesz dobre testy jednostek, nie musisz mieć dostępu do żadnych pól prywatnych. Testy jednostkowe powinny sprawdzić, czy po przekazaniu w znanym zestawie wartości metoda zachowuje się w określony sposób (przez zwrócenie odpowiednich danych lub użycie zależności w znany sposób).

Jeśli próbujesz przetestować później, użyj Dependency Injection, aby wprowadzić zależności do badanej klasy. Będziesz mieć pełny dostęp do tych zależności w swoich testach.

+0

Dziękuję wam, nie zdawałem sobie sprawy, że naruszam zasady TDD. Dziękujemy – Michelle

+2

Pytanie brzmiało, czy to było możliwe, nie, czy jest to najlepsza praktyka. – stuartd

+0

Chociaż zgadzam się z Justinem w teorii, w praktyce często trzeba pisać testy jednostkowe dla kodu suboptymalnego, którego nie można zmienić lub nie można go łatwo zmienić. – Dave

Powiązane problemy