Natknąłem się ostatnio na pewien problem.

Jak przeprowadzić test funkcji zadeklarowanej jako private wewnątrz pewnej klasy.

Rozwiązania:

  1. Najbardziej oczywiste zmienić dostęp do metody na publiczny.

  2. Zadeklarować metodę jako protected i dziedziczyć w innej klasie która obuduje metodę prywatną metodą publiczną [wrapper].

3.Zadeklarować funkcje jako internal i użyć Attrybutu InternalsVisibleTo. Oczywiście jeżeli kod testów trzymamy w tym samym projekcie co nasza metoda to internal już zapewnia nam dostęp do niej. Dobrą praktyką jednak jest trzymanie kodu testującego w oddzielnym Assembly.

Wszystkie te sposoby psują naszą koncepcje która z jakiegoś ważnego powodu zakładała że nasza  funkcja powinna być prywatna.

Pozostają jeszcze :

4.Użyć mechanizmu refleksji.

  1. Zastanowić się czy aby na pewno powinniśmy testować metodę prywatną .Z zalożenia testy jednostkowe powinny testować interfejs naszej klasy.Testując metody prywatne narażamy sie na testowanie implementacji co przy zmianie kodu może wymusić zmianę testów.

Więcej Info