Witam! Uczę się C# , ale ostatnio zagłębiam się w temacie testów. Chciałem zadać kilka pytań odnośnie tego tematu.
1. Czy dobrą praktyką jest próba testowania metod prywatnych poprzez zamianę ich na metody internal oraz użycie atrybutu InternalsVisibleTo? Słyszałem różne opinie o tym. Ponoć lepiej jest je testować wyżej za pomocą metod publicznych lub wydzielić je do osobnej klasy, ale to chyba nie zawsze jest możliwe.
2. Jak testować metody, które używają Console.Readkey? Czy da się zasymulować kliknięcie klawisza?
3. Co powinno się testować, a co nie?
4. Jeśli jakaś metoda wyświetla tekst w konsoli to jak przetestować to działanie, jak sprawdzić co dokładnie wyświetla konsola?
5. Jeśli metoda wykonuje się zdecydowanie więcej niż 1 sekunda, to czy opłaca się ją testować?
6. Jeśli jest klasa, która sama ustawia wartości swoich pól, a chcielibyśmy sprawdzić jak zachowują się metody tej klasy podczas gdy pola tej klasy mają jakieś specyficzne wartości to czy można udostępnić testom te pola poprzez settery? Np: byłby przypadek, że wartości tych pól są ustawiane przez Console.Readkey a nie można zasymulować kliknięcia klawisza, więc czy tutaj można użyć settera?
7. Załóżmy, że mamy taką sytuację, że jest klasa "A" i ma metodę "a" oraz klasę "B" i metodę "b" i metoda "B.b" wywołuje "A.a". Czy napisać osobne testy do tych metod, czy wystarczy, że przetestujemy tylko "B.b"?
8. Jest klasa ZegarBinarny i ma publiczną metodę WyświetlCzas oraz prywatną metodę KonwertujLiczbęDecymalnąNaBinarną. Chciałbym przetestować tę metodę prywatną, więc nie byłoby złem gdybym zamienił ją na public/internal, czy muszę ją wydzielić do osobnej klasy Konwerter?
9. Mam klasę, która jest odpowiedzialna za uruchamianie notatnika (która używa do tego klas ProcessStartInfo i Process), chciałbym za pomocą testów sprawdzić czy ona faktycznie uruchamia notatnik. Czy w środowisku testowym można uruchomić notatnik? Z tego co mi wiadomo to podczas testów nie powinno się używać baz danych i innych tego typu rzeczy.
To wszystko! Sporo trochę tego, ale będę wdzięczny jeśli ktoś pomoże.