Wątek przeniesiony 2017-09-26 00:08 z C# i .NET przez somekind. Powód: Niepoprawna kategoria forum

Granica między testami integracyjnymi a jednostkowymi

Odpowiedz Nowy wątek
2017-09-22 14:58
0

Czy mogę zaliczyć test używający SQLite w pamięci jako Stub do testów jednostkowych?.

Dla przykładu test paginacji strony:
Za jednostkę uznaję "paginację" pobranie odpowiedniej liczby wierszów na stronę ale w rzeczywistości testuje zapytanie do sql generowane przez Nhibernatora.


▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█
▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄
▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█
edytowany 2x, ostatnio: MrBean Bean, 2017-09-22 22:57

Pozostało 580 znaków

2017-09-22 18:03
0

autorze, jednostka to jest funkcja.
Czasami jezeli masz w klasie funkcje prywatne (ktore naleza do klasy i nie mozna ich wyodrebnic) wtedy funkcja korzystajaca z innych fukncji z obrebie tej samej klasy!

Ale jezeli ktorekolwiek odwoluje sie do innej klasy to taka zaleznosc trzeba zmockowac (no i pamietajmy nie testujemy frameworkow)

jezeli laczysz sie z baza danych jest to test integracyjny, jezeli chcesz jednostkowy to mockujesz baze danych

Pozostało 580 znaków

2017-09-22 18:22
0

Ty nie odróżniacie mock od stub czy fakeObject. Mówisz mi o jakiś definicjach z wikipedi typu jednostka to funkcja w klasie. Nie chcę mi się już o tym gadać...

fasadin napisał(a):

autorze, jednostka to jest funkcja.
Czasami jezeli masz w klasie funkcje prywatne (ktore naleza do klasy i nie mozna ich wyodrebnic) wtedy funkcja korzystajaca z innych fukncji z obrebie tej samej klasy!

Ale jezeli ktorekolwiek odwoluje sie do innej klasy to taka zaleznosc trzeba zmockowac (no i pamietajmy nie testujemy frameworkow)

jezeli laczysz sie z baza danych jest to test integracyjny, jezeli chcesz jednostkowy to mockujesz baze danych


▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█
▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄
▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█

Pozostało 580 znaków

2017-09-22 18:36
1
MrBean Bean napisał(a):

Z tego co wynika to dla ciebie jednostka pracy oraz dostęp do danych to samo. :D

Absolutnie nie. A dostępu do danych z bazy nie ma nawet sensu testować jednostkowo, trzeba integracyjnie na prawidłowym silniku.

MrBean Bean napisał(a):

A test integracyjny testuje zestawie wielu jednostek.

Test integracyjny testuje komunikację kodu aplikacji z zewnętrznymi modułami. Mogą to być moduły tej samej bazy, a mogą być pliki, strumienie sieciowe, bazy danych (tak jak w Twoim przypadku).

fasadin napisał(a):

Ale jezeli ktorekolwiek odwoluje sie do innej klasy to taka zaleznosc trzeba zmockowac (no i pamietajmy nie testujemy frameworkow)

Nie trzeba mockować, często nie ma sensu mockować ani nawet nie da się mockować. Jednostka nie musi być jedną klasą, może być wieloma.

jezeli laczysz sie z baza danych jest to test integracyjny, jezeli chcesz jednostkowy to mockujesz baze danych

Tylko taki test jest zupełnie bezużyteczny, bo niczego nie testuje, nie dowodzi, ani nie wykrywa żadnych błędów.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2017-09-22 22:30
0

Test integracyjny testuje komunikację kodu aplikacji z zewnętrznymi modułami. Mogą to być moduły tej samej bazy, a mogą być pliki, strumienie sieciowe, bazy danych (tak jak w Twoim przypadku).

"Rzeczywistej BazyDanych, rzeczywistych zależności"! wyciąłeś sobie to z ogólnej definicji. Dla własnej wygody, żeby się kłócić :)

Test integracyjny testuje komunikację kodu aplikacji z zewnętrznymi modułami. Mogą to być moduły tej samej bazy

To stwierdzenie jest jak najbardziej poprawne. ale dalej już obracasz kota ogonem.

Baza danych która została stworzona na potrzeby testu i żyje tylko w zakresie testu jest tworem sztucznym.
I nie ma nic wspólnego z bazą systemową.

Tak na logikę kowboja jak to Vernon pisze :) Jeśli to test integracyjny to jak system blogowy ma działać z zintegrowaną bazą która żyje w pamięci tymczasowej.?


▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█
▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄
▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█
edytowany 1x, ostatnio: MrBean Bean, 2017-09-22 22:31

Pozostało 580 znaków

2017-09-22 22:39
6

Niczego z definicji nie wycinałem, bo nie operuję żadnymi definicjami, jestem pragmatykiem. Testy jednostkowe testują kod, nie potrzebują niczego więcej żeby się uruchomić. A testy integracyjne potrzebują czegoś więcej, np. bazy. Wszystko jedno czy to baza taka jak produkcyjna, czy jakaś in-memory, bo zarówno jedna jak i druga jest zewnętrznym komponentem z punktu widzenia kodu aplikacji.
I o ile czasami takie testy z bazą in-memory mają sens (chociaż to niekoniecznie dobrze świadczy o architekturze), to w przypadku, gdy chcemy przetestować generowany SQL/wyniki zwracane z bazy, takie testy są zupełnie bezwartościowe - bo rzeczywista baza może działać inaczej i zwracać inne dane niż ta w pamięci.

A dla własnej wygody, żeby się kłócić, to chyba Ty tu przyszedłeś, bo najpierw niby zadałeś pytanie, a potem masz żal, że pojawiły się odpowiedzi nie pasujące do Twojej teorii.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
A nie przejmuj się, ja tak zawsze robię. - MrBean Bean 2017-09-22 22:47

Pozostało 580 znaków

2017-09-23 01:37
0

To oni wszyscy też się mylą tak samo jak Ja?? :)
https://www.google.pl/search?[...]i5i30k1j35i39k1.0.sYnqG3ECw-Y

https://devstyle.pl/2009/11/2[...]nt-nhibernate-nunit-i-sqlite/

Na moje oko, to już przestaje wyglądać jak teoria...?

Poza tym nie mam żadnego żalu, nie czuje się żadnym królem forum abym musiał przeżywać jakieś żale.


▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█
▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄
▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█
edytowany 2x, ostatnio: MrBean Bean, 2017-09-23 01:41

Pozostało 580 znaków

2017-09-23 02:37
1

Czy mogę zaliczyć test używający SQLite w pamięci jako Stub do testów jednostkowych?.

Wymyśliłeś sztuczny problem, w którym masz dwa zbiory: zbiór testów jednostkowych oraz zbiór testów integracyjnych.

Masz na wejściu test używający SQLite i próbujesz znaleźć zbiór do którego będzie on pasował.

Nie posiadasz jednak spójnej definicji, zasady logicznej, więc założyłeś cały wątek w którym próbujesz razem z innymi odnaleźć warunek, który pozwoli przypisać test do zbioru testów jednostkowych.

Czasem takie rozważania się przydają, i można dojść do ciekawych wniosków, ale jak dla mnie ten wątek póki co jest jakiś mdły i ma nikłą wartość praktyczną.

Czy mogę zaliczyć test używający SQLite w pamięci jako Stub do testów jednostkowych?.

Z perspektywy praktycznej wypadałoby zmienić pytanie raczej na:

Czy powinienem testować ficzer za pomocą SQLite w pamięci czy może innymi metodami?

(gdzie za powinienem/nie powinienem powinny stać jakieś konkretne korzyści/wady).


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
Każdy problem który jest dla ciebie mało interesujący jest problemem sztucznym? - MrBean Bean 2017-09-23 03:52
nie, po prostu nie widzę zastosowania praktycznego dociekania, czy test X należy do zbioru testów integracyjnych, bo spełnia odpowiednie kryteria. Przynajmniej nie bez większego kontekstu, tzn. nie wiem dlaczego zadajesz to pytanie. - LukeJL 2017-09-23 12:14
Tj. wydaje mi się, że w pewnych sytuacjach mogłoby to być całkiem okej pytanie - np. jeśli masz w projekcie folder unit_tests i integration_tests i nie wiesz, gdzie wsadzić dany test. To by było zrozumiałe, chcesz mieć porządek w projekcie. Natomiast czytając ten post nie widzę tu takiego czy podobnego celu, przynajmniej nie wyjaśniłeś go. A defaultowo przyjmuję, że testy są po to, żeby sprawdzić poprawność działania aplikacji, a to jak je nazwiemy jest już drugorzędne. - LukeJL 2017-09-23 12:15

Pozostało 580 znaków

2017-09-23 04:44
0

I o ile czasami takie testy z bazą in-memory mają sens (chociaż to niekoniecznie dobrze świadczy o architekturze), to w przypadku, gdy chcemy przetestować generowany SQL/wyniki zwracane z bazy, takie testy są zupełnie bezwartościowe - bo rzeczywista baza może działać inaczej i zwracać inne dane niż ta w pamięci.

Podaj mi przykład.


▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█
▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄
▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█

Pozostało 580 znaków

2017-09-23 08:46
1
MrBean Bean napisał(a):

I o ile czasami takie testy z bazą in-memory mają sens (chociaż to niekoniecznie dobrze świadczy o architekturze), to w przypadku, gdy chcemy przetestować generowany SQL/wyniki zwracane z bazy, takie testy są zupełnie bezwartościowe - bo rzeczywista baza może działać inaczej i zwracać inne dane niż ta w pamięci.

Podaj mi przykład.

Podam Ci nawet bardziej dosadny, smutny przykład.
Był test integracyjny, ale taki prawdziwy, nie używający nawet in-memory i przechodził na komputerze lokalnym, czy nawet na serwerze CI. Jednak podczas testów manualnych, dla takich samych danych wejściowych, kod się wysypał. Co było powodem? Test był skonfigurowany z innym dialektem SQL niż sama aplikacja.

edytowany 4x, ostatnio: mstl, 2017-09-24 23:18

Pozostało 580 znaków

2017-09-23 09:39
0

W moim przypadku jak jest to możliwe jeśli to ORM generuje zapytanie a konfigurację ORM wstrzykuje podczas testu.?

Moja aplikacja rozmawia z ORM a nie bezpośrednio z silnikiem zapytań wiec to ORM powinien zapewnić integrację pomiędzy dialektami.

mstl napisał(a):
MrBean Bean napisał(a):

I o ile czasami takie testy z bazą in-memory mają sens (chociaż to niekoniecznie dobrze świadczy o architekturze), to w przypadku, gdy chcemy przetestować generowany SQL/wyniki zwracane z bazy, takie testy są zupełnie bezwartościowe - bo rzeczywista baza może działać inaczej i zwracać inne dane niż ta w pamięci.

Podaj mi przykład.

Podam Ci nawet bardziej dosadny, smutny przykład.
Był test integracyjny, ale taki prawdziwy, nie używający nawet in-memory przechodził na komputerze lokalnym. Jednak podczas testów manualnych, dla takich samych danych wejściowych, kod się wysypał. Co było powodem? Test był skonfigurowany z innym dialektem SQL niż sama aplikacja.


▒▒▒▒▒▒▒▒█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▒▒▒▒▒▒▒█░▒▒▒▒▒▒▒▓▒▒▓▒▒▒▒▒▒▒░█
▒▒▒▒▒▒▒█░▒▒▓▒▒▒▒▒▒▒▒▒▄▄▒▓▒▒░█░▄▄
▒▒▄▀▀▄▄█░▒▒▒▒▒▒▓▒▒▒▒█░░▀▄▄▄▄▄▀░░█
edytowany 2x, ostatnio: MrBean Bean, 2017-09-23 10:00

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0