Wpis z mikrobloga

#programowanie #csharp

Unit testy (testy jednostkowe). Moja klasa A polega na bezpośrednich informacjach obiektu klasy B (z zewnętrznej biblioteki). Np:

if(b.jakieśPoleTylkoDoOdczytu)
...

W tym układzie wszystko jest jasne i proste. Potrzebuje jednak wykonać unit testy mojej klasy A, które zależne są bezpośrednio od B. Nie powinno się jednak mockować (przepraszam jeśli inaczej się to odmienia) klas - w tym wypadku B. Czy powinienem wszystkie relacje pomiędzy A i B przenieść jakoś na osobny interfejs i dopiero wtedy go mockować? Czy może zupełnie źle do tego podchodzę?
  • 12
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Telhurin: Zrób wrapper do zewnętrznej klasy B, z potrzebnym Ci interfejsem. Wtedy można uznać taką klasę za część zewnętrznego systemu a takiego kodu się nie testuje jednostkowo, jedynie integracyjnie itd. Nie testuj jednostkowo/mockuj kodu który może się zepsuć nawet jak źle zinterpretowałeś dokumentację serwisu, to nic nie da :)

Oczywiście wtedy tą swoją klasę B łatwo mockujesz przewidując co ma zwrócić przy testowaniu klasy A
  • Odpowiedz
@ogrod87: Mam/miałem wątpliwości z pierwszego postu ponieważ o ile wrap jest jeszcze do przełknięcia, interfejs wyłącznie dla tego wrapu (tylko żeby potem przez niego mockować) wydaje się na pierwszy rzut oka bardzo sztuczny.
  • Odpowiedz
@ogrod87: Miałoby to chyba sens, ale jestem wymaganiami ograniczony do biblioteki Nsubstitute, która jak rozumiem rzeczy takie jak właśnie stub, fake czy spy zastępuje po prostu szerszym substitute.
  • Odpowiedz
@Telhurin: ja bym zaleznosci nie przenosil na osobny interfejs ale do metody. Potem z nsubstitute uzyc forParts. I zrobic fake returna tylko dla tej metody, ktorą napiszesz. Mam nadzieje, ze rozumiesz
  • Odpowiedz