Pracuję z wieloma aplikacjami internetowymi, które są obsługiwane przez bazy danych o różnym stopniu złożoności w zapleczu. Zazwyczaj istnieje warstwa ORM oddzielona od logiki biznesowej i prezentacji. To sprawia, że testowanie jednostkowe logiki biznesowej jest dość proste; rzeczy mogą być zaimplementowane w oddzielnych modułach, a wszelkie dane potrzebne do testu można sfałszować poprzez kpiny z obiektów.Jaka jest najlepsza strategia testowania jednostkowego aplikacji bazujących na bazach danych?
Jednak testowanie ORM i samej bazy danych zawsze było obciążone problemami i kompromisami.
Przez te wszystkie lata próbowałem kilku strategii, z których żadna nie całkowicie mnie usatysfakcjonowała.
Załaduj testową bazę danych ze znanymi danymi. Przeprowadź testy przeciwko ORM i sprawdź, czy wracają właściwe dane. Wadą jest to, że Twój testowy DB musi nadążać za zmianami schematu w bazie danych aplikacji i może się zsynchronizować. Opiera się również na sztucznych danych i nie może ujawniać błędów, które pojawiają się z powodu głupich danych wprowadzanych przez użytkownika. Wreszcie, jeśli testowa baza danych jest mała, nie ujawni ona nieefektywności, takich jak brakujący indeks. (OK, ten ostatni nie jest tak naprawdę testem jednostkowym, ale nie zaszkodzi.)
Załaduj kopię produkcyjnej bazy danych i przetestuj ją. Problem polega na tym, że nie masz pojęcia, co znajduje się w DB produkcji w danym momencie; Twoje testy mogą wymagać ponownego napisania, jeśli dane zmieniają się w czasie.
Niektóre osoby wskazały, że obie te strategie opierają się na konkretnych danych, a test jednostkowy powinien testować tylko funkcjonalność. W tym celu widziałem zasugerowane:
- Użyj próbnego serwera bazy danych i sprawdź tylko, czy ORM wysyła prawidłowe zapytania w odpowiedzi na dane wywołanie metody.
Jakie strategie zastosowano do testowania aplikacji bazujących na bazach danych? Co zadziałało najlepiej dla ciebie?
Ładowanie kopii bazy danych produkcyjnych ma również wpływ na bezpieczeństwo i prywatność. Kiedy zrobi się duży, zrobienie kopii i umieszczenie go w środowisku programisty może być wielką sprawą. –
Szczerze, to jest ogromny ból. Jestem nowy w testowaniu i napisałem też orm, który chcę przetestować. Użyłem już twojej pierwszej metody, ale przeczytaj, że nie robi ona jednostki testowej.Używam określonej funkcjonalności silnika db, więc kpiny z DAO będą trudne. Myślę, że źle po prostu używam mojej obecnej metody, ponieważ działa, a inni jej używają. Zautomatyzowane testy rock btw. Dzięki. – frostymarvelous
Zarządzam dwoma różnymi dużymi projektami, w jednym z nich to podejście było idealne, ale mieliśmy wiele problemów próbując wdrożyć to w innym projekcie. Myślę więc, że to zależy od tego, jak łatwo można odtworzyć schemat za każdym razem, aby wykonać testy. Obecnie pracuję nad znalezieniem nowego rozwiązania tego ostatniego problemu. – Cross