• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Pytania odnośnie testów jednostkowych

Object Storage Arubacloud
0 głosów
149 wizyt
pytanie zadane 17 kwietnia 2020 w C# przez dawid2002 Mądrala (5,190 p.)
zamknięte 18 kwietnia 2020 przez dawid2002

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.

komentarz zamknięcia: Znam już odpowiedzi do pytań
komentarz 18 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)

Z racji, że nie piszę w c# trudno mi odpowiedzieć. Mogę podać co najwyżej sposób z c++, który prawdopodobnie da się przełożyć na c#. 

#include <sstream>
#include <iostream>

void f()
{
    std::cout << "hello world\n";
}

int main()
{
    std::ostringstream oss;
    std::streambuf* p_cout_streambuf = std::cout.rdbuf();
    std::cout.rdbuf(oss.rdbuf());

    f();

    std::cout.rdbuf(p_cout_streambuf);

    assert(oss && oss.str() == "hello world\n";
    std::cout << oss.str();
}

Po szybkim i mało dokładnym przejrzeniu docsów od MS, widzę, że jest taka klasa jak StreamWriter, która może pomóc. 

komentarz 18 kwietnia 2020 przez dawid2002 Mądrala (5,190 p.)
No dobrze. Ale chciałbym wiedzieć jak oddzielić logikę od interfejsu w aplikacjach konsolowych.
komentarz 18 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)
To zależy jak wygląda kod.
komentarz 18 kwietnia 2020 przez dawid2002 Mądrala (5,190 p.)
edycja 18 kwietnia 2020 przez dawid2002
No dobrze to wszystko. Dziękuje ci za pomoc!

PS. Odnośnie testowania strumienia wyjścia (i wejścia) w C# to można to zrobić tak:

https://gist.github.com/asierba/ad9978c8b548f3fcef40
komentarz 18 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)
Ogólnie bez kodu i jakiegoś zarysu założeń, trudno cokolwiek powiedzieć. Dzięki za link.

Podobne pytania

+2 głosów
1 odpowiedź 607 wizyt
0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 20 kwietnia 2020 w PHP przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
1 odpowiedź 112 wizyt
pytanie zadane 18 kwietnia 2020 w PHP przez michal_php Stary wyjadacz (13,700 p.)

92,555 zapytań

141,404 odpowiedzi

319,559 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...