Testy-jednostkowe-zapytan-SQL

Niejednokrotnie już na łamach bloga czy podcastu powtarzałem, że SQL w pracy konsultanta to obok samego systemu ERP drugie najważniejsze narzędzie pracy.

Przez lata pracy w projektach nie raz tworzyłem dedykowane funkcje czy procedury, które przetwarzały dane oraz zwracały określone wyniki.

Ostatnio miałem przyjemność zgłębić temat, który według mnie może dać dużo każdemu, kto pracuje z SQLem na trochę większym poziomie niż samo odczytywanie danych. Dzisiaj mowa o testach jednostkowych zapytań SQL.

Czym są testy jednostkowe?

Testy jednostkowe wywodzą się z programowania i w dużej mierze właśnie dzięki obserwowaniu poczynań znajomych programistów zainspirowałem się do rozeznania w tym temacie. Dla developerów jest to bardzo często chleb powszedni, a testowanie kodu jest wręcz standardem. No dobra, ale czym są właściwie te testy?

Testy jednostkowe to kod, który weryfikuje poprawność logiki biznesowej pisanego fragmentu kodu w projekcie.

Najprościej mówiąc, testy to wyodrębnione fragmenty kodu mające na celu sprawdzenie czy np. funkcja, którą trzeba napisać w projekcie docelowym działa zgodnie z założeniami.

Fragmentu „funkcja, którą trzeba napisać” użyłem tutaj nie przypadkowo, ponieważ pisanie testów mocno wiążę się z podejściem TDD – Test Driven Development. A ono opiera się na tym, by najpierw pisać testy, a później dopiero docelowy kod.

Od razu nasuwa się pytanie – ale jak testować coś, czego nie ma? No na pierwszy rzut oka wydaje się to faktycznie absurdalne, ale przecież jeżeli mamy napisać jakąś funkcję do konkretnych obliczeń, to przecież wiemy, jaki rezultat chcemy osiągnąć.

Na tym polega właśnie działanie w TDD:

  1. Piszemy testy, które siłą rzeczy nie mają prawa przejść, ponieważ testowany podmiot nie jest jeszcze zaimplementowany.
  2. Pracujemy nad funkcją czy procedurą, do której napisaliśmy testy, do momentu aż testy zakończą się sukcesem.
  3. Porządkujemy, czyścimy, upiększamy kod.

Czy to faktycznie istotne dla konsultanta/wdrożeniowca ERP?

Tutaj nie pozostaje mi napisać nic innego jak słynne „To zależy”.

Jeżeli operujesz SQLem głównie po to, by analizować to, co dzieje w systemie z poziomu bazy albo wyciągać z niego jakieś dane za pomocą względnie prostych zapytań, to na pewno nie.

Gra jest warta świeczki w momencie, gdy tworzysz już bardziej zaawansowane operacje z poziomu SQLa, które mają zawartą w sobie specjalną logikę. W moim przypadku jest to bardzo częste, ponieważ odpowiadam za przygotowywanie mechanizmów integracji z systemami zewnętrznymi. Wykorzystuje SQLa po to, by dostarczyć dane w określony sposób np. do systemu księgowego czy WMS.

Dlatego właśnie zdecydowałem się temat zgłębić, ponieważ przy poziomie skomplikowania niektórych zapytań, zarządzanie nimi staje się co raz bardziej problematyczne.

Narzędzia do testowania

W przypadku środowiska Microsoft SQL Server główne opcje są dwie:

Pierwsza z nich to framework, który swoimi możliwościami i funkcjonalnością może dać naprawdę niezłe rezultaty. Instaluje się go bezpośrednio w bazie danych, na której będą przeprowadzane testy. Jednakże na pierwszy ogień sprawdziłem możliwości Visual Studio i bardzo przypadło mi do gustu. Przede wszystkim dlatego, że testy są niezależne od bazy – kod mam w swoim projekcie z testami. Za to testy łączą się do funkcji w docelowej bazie bez problemu.

A teraz być może najważniejsze – Database Project. W tym typie projektu można przechowywać wszelkie skrypty, publikować je do bazy, z równie istotną kontrolą wersji włącznie. Dzięki temu mogę wszystkie projekty integracji dla poszczególnych klientów trzymać w przejrzysty i ustrukturyzowany sposób.

Tyle na razie słowem wstępu. W planie mam pokazać Wam zarówno Viusal Studio jak i tSQLt. W momencie, gdy powstaje ten wpis, jestem dopiero na początku swej drogi. Następne posty w tym obszarze będą pewnym rodzajem dokumentowania mojej przygody z testowaniem. Mam nadzieję, że pójście tą ścieżką razem ze mną będzie dla Ciebie ciekawą i interesującą lekcją.

Podobał Ci się ten wpis? Zapraszam do mojej listy mailingowej by otrzymać więcej dodatkowych materiałów oraz być na bieżąco z nowościami!