Przygotowuję pewne testowe rusztowanie wokół istniejącego projektu. Obejmuje to niektóre testy integracyjne, używając JUnit i DbUnit. Przygotowałem także instalację Jenkinsa do ciągłej integracji.JUnit + DbUnit: Przełącz połączenie z bazą danych między środowiskami programistycznymi a testowymi
Mój problem polega na zmianie połączeń DB między środowiskiem programowania i testowania. Posiadam własny lokalny produkt do szybkiego testowania i badania ad-hoc. W miarę rozwoju prac przeprowadzam testy przeciwko mojej prywatnej bazie danych, ponieważ jest to szybsze i nie zepsuje niczyjego dnia z błędnym kodeksem pracy w toku.
Po wpisaniu kodu Jenkins uruchomi moje testy. W tej chwili wciąż wskazuje na moją lokalną bazę danych. Wolałbym, żeby Jenkins przeprowadzał testy na innej bazie danych, która znajduje się w środowisku testowym.
Czy istnieje najlepsza praktyka/strategia/technologia/itp. Do zmiany połączeń z bazami danych do testowania bez konieczności zmiany kodu? Punkty premiowe, jeśli rozwiązanie pozwala Jenkinsowi na przeprowadzenie tych samych testów przeciwko wielu DB (powinno być możliwe, ponieważ DbUnit jest agnostyczny).
Modyfikacje dokładniejsze informacje
produkt jest duży, z kilkudziesięciu różnych oddziałującymi składnikami, (zwykle w oddzielnych VMS/procesów). W żywym systemie różne procesy zwykle przekazują przez bazę danych. IE, proces interfejsu użytkownika zapisuje zmiany w tabeli, a proces back-end sprawdza tę tabelę pod kątem zmian. Tak, to okropne. Do testowania integracji, konfiguruję system za pomocą interfejsu użytkownika i przechwytuję ten stan za pomocą DbUnit. Mogę wtedy uruchomić testy przeciwko temu "wejściu".
Mój komponent i wszystkie nowe komponenty są zarządzane przez maven. Połączenia DB są obecnie zakodowane na stałe w konfiguracji testowej. Działa system DbUnit; Chciałbym móc zmienić bazę danych, do której odnoszą się moje testy, w zależności od tego, czy są one uruchamiane przeze mnie w moim środowisku programistycznym, czy uruchamiane przez Jenkinsa w środowisku testowym.
Jestem zakłopotany noobly, jeśli chodzi o wiosnę, ale to, co wiem, prowadzi mnie do przekonania, że może to być pomocne rozwiązanie. Mam wrażenie, że skonfigurowałeś źródła danych w języku xml i dodałeś adnotacje do swoich klas dla wtrysku zależnego od środowiska wykonawczego. Czy Spring byłaby w stanie zmienić, który DB jest wstrzykiwany w oparciu o środowisko (dev vs. test)? –
Masz rację co do konfiguracji połączenia z bazą danych w XML. Ale do tego, co próbujesz osiągnąć, myślę, że naprawdę powinieneś skupić się na tym, co Maven zrobi dla ciebie i jak Maven właściwości i profile dla twojej kompilacji mogą być użyte by dostosować twoją budowę i uruchomić twoje testy. Maven może uruchomić twoje testy jednostkowe i ma zasoby, które są używane tylko w fazie testowej, wtedy może użyć innego zestawu zasobów dla twojej głównej budowy, która idzie do jakiegokolwiek środowiska. Jenkins uruchamia maven builds, więc możesz symulować na komputerze dokładnie to samo, co Jenkins. – BenSchro10