Testy jednostkowe w C# a metody prywatne – jak to ugryźć?

Wracam po prawie 2 letniej przerwie w pisaniu czegokolwiek, praca, zajęcia i kto wie co jeszcze przeszkodziły mi w uzupełnianiu Bloga. No cóż, nie ma rozlewać się nad przeszłością, trzeba brnąć dalej !

Postanowiłem, że mój kod będzie lepszy, bardziej odporny na błędy i dobrze przetestowany. Dlatego chciałbym poruszyć kwestię testów jednostkowych w C#. Mam nadzieje czytelniku że wiesz do czego służą testy jednostkowe i jakie korzyści płyną z ich korzystania. Ja chciałbym tutaj przytoczyć sposób w jaki rozwiązuje testowanie metod prywatnych.

Rozwiązań jest pewnie kilka, jednak najgorszą wydaje mi się łamanie hermetyzacji na rzecz testowania metod prywatnych zamieniając je na publiczne, zaciemniamy innemu developerowi jaki tak na prawdę powinien być dostęp do metody…
Moim sposobem na testowanie prywatnych metod jest udostępnieniu wybranym podprojektom dostępu do metod prywatnych, jak to zrobić ? Wystarczy tylko kilka kroków:)

  1. W swoim projekcie przejdź do sekcji Properties -> następnie odnajdź plik AssemblyInfo.
  2. Dodaj na końcu tego pliku linijkę:
    [assembly: InternalsVisibleTo("MyTestProjectName")]

    W miejscu MyTestProjectName podaj nazwę swojego podprojektu z testami.

  3. Możliwe, że zdarzyło Ci się widzieć słówko internal jako modyfikator dostępu do jakieś metody, otóż tutaj wykorzystywany jest jego potencjał zamiast private użyj słówka internal spowoduje to, że z zewnątrz metoda będzie prywatna, a projekcie z testami uzyskamy do niej dostęp
  4. Przebuduj projekt
  5. Ciesz się dostępem do metod prywatnych  !
  6. Przykładowe użycie w klasie testowej:
    namespace MyTestProject
    { 
    [TestClass]
        public class MagicTest 
       {
            [TestMethod()]
            public void DoMagicTest()
            {
                 DoMagic magicObject = new DoMagic();
                 magicObject.ThrowMagicStars();//metod prywatna
                 Assert.AreEqual(magicObject.NumberOfMagicStarsInTheAir,5);
            }
        }
    }

     

    [iframe src=”http://giphy.com/embed/6oB3X3W6MYM3C” width=”500″ height=”250″ frameBorder=”0″ webkitAllowFullScreen mozallowfullscreen allowFullScreen][/iframe]

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here

Loading Facebook Comments ...