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

Testy jednostkowe do tej klasy

0 głosów
61 wizyt
pytanie zadane 21 marca 2020 w C# przez dawid2002 Mądrala (5,170 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 (205,710 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,170 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 (205,710 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,170 p.)
Wydaje mi się, że powinny być w tam, gdzie są...
komentarz 21 marca 2020 przez Ehlert Ekspert (205,710 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,170 p.)
Czyli mam nie próbować dzielić tej klasy na mniejsze klasy, tylko napisać to wszystko odnowa?
komentarz 21 marca 2020 przez Ehlert Ekspert (205,710 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,170 p.)
Dzięki za pomoc!

Podobne pytania

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

86,541 zapytań

135,291 odpowiedzi

300,649 komentarzy

57,288 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...