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

Testy jednostkowe do tej klasy

Object Storage Arubacloud
0 głosów
129 wizyt
pytanie zadane 21 marca 2020 w C# przez dawid2002 Mądrala (5,190 p.)

Witam! Piszę projekt w którym mam pewną klasę do której chciałbym napisać testy. Problem polega na tym, że nie mogę wykonać tych testów ponieważ wszystkie metody, które chcę przetestować są prywatne (tylko jedna metoda jest publiczna). Nie wiem co zrobić. W zasadzie z tego co mi wiadomo metod prywatnych nie powinno się testować, ale chciałbym jednak napisać jakieś testy, czuje taką potrzebę. Zastanawiam się czy winną tego wszystkiego nie jest to, że źle zaprojektowałem tę klasę albo czy nie jest ona zbyt duża, bądź czy niepotrzebnie staram się to wszystko testować. Generalnie metody które chciałem przetestować to (poniżej jest link do kodu klasy):

- CheckSelectedIndexes oraz SetIndexesOfField (w liniach 149 i 178)

- SetMinesOnBoard (w linii 194)

- LoadNumberOfMinesIntoDisplayedBoard (259)

- CalculateHowManyMinesAreAroundField (290)

- UnveilingFieldOrSeveralFields (380)

- GetGameTimeInTextVersion (437)

Kod klasy jest tutaj: https://github.com/DavidPL-coder/MultiGry/blob/master/MultiGry/MinesweeperGame.cs

Klasa ta jest częścią programu, który wyświetla menu gier. Użytkownik może sobie wybrać jakoś grę. Ta klasa to gra saper (wersja konsolowa).

Z góry dziękuje za pomoc!

PS.

Przepraszam, że znowu zadaje te pytanie, ale wcześniej nikt nie odpowiedział.

1 odpowiedź

0 głosów
odpowiedź 21 marca 2020 przez Ehlert Ekspert (212,670 p.)
wybrane 21 marca 2020 przez dawid2002
 
Najlepsza
Pojawia się tutaj klasyczny problem na który wskazują unit testy. Klasa wykonuje zdecydowanie za dużo logiki. Fakt że praktycznie wszystko jest prywatne nie pomaga. Na chwilę obecną jest to raczej nietestowalne jednostkowo.
komentarz 21 marca 2020 przez dawid2002 Mądrala (5,190 p.)
Wychodzi na to, że muszę rozbić klasę na mniejsze części. Największym problemem jest tutaj to, że niektóre funkcjonalności korzystają z pól tej klasy, które są też potrzebne w innych miejscach. Przeważnie potrzebują po jednej lub po dwa i nie jest to problemem można później przekazać wartości tych pól przez argumenty, ale metoda LoadNumberOfMinesIntoDisplayedBoard używa ich aż 5, i nie wiem jak przekazać tak dużą ilość danych, gdybym ją dał do innej klasy.
komentarz 21 marca 2020 przez Ehlert Ekspert (212,670 p.)
Ja zrobiłem tylko luźne review, nie wiem jaki problem modelujesz. Na pewno trzeba to bardziej zrobić. Jeśli twierdzisz że musisz przekazać za dużo danych to zastanów się czy muszę one być tam, gdzie są obecnie
komentarz 21 marca 2020 przez dawid2002 Mądrala (5,190 p.)
Wydaje mi się, że powinny być w tam, gdzie są...
komentarz 21 marca 2020 przez Ehlert Ekspert (212,670 p.)

Masz rację, wydaje Ci się wink​​​​​​

Opakowałeś całą grę w jedną klasę i chcesz to testować jednostkowo. Nie da rady.

komentarz 21 marca 2020 przez dawid2002 Mądrala (5,190 p.)
Czyli mam nie próbować dzielić tej klasy na mniejsze klasy, tylko napisać to wszystko odnowa?
komentarz 21 marca 2020 przez Ehlert Ekspert (212,670 p.)
Teoretycznie możesz pisać od nowa, ale więcej się nauczysz dzieląc ten kod na składowe.
komentarz 21 marca 2020 przez dawid2002 Mądrala (5,190 p.)
Dzięki za pomoc!

Podobne pytania

0 głosów
0 odpowiedzi 149 wizyt
pytanie zadane 20 marca 2020 w C# przez dawid2002 Mądrala (5,190 p.)
+1 głos
1 odpowiedź 185 wizyt
0 głosów
0 odpowiedzi 103 wizyt
pytanie zadane 12 września 2019 w C# przez Krst0 Obywatel (1,340 p.)

92,536 zapytań

141,377 odpowiedzi

319,452 komentarzy

61,920 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!

...