Używamy podwójne persistence.xml pliki czasy pracy produkcyjnych i testowych, ale to tylko kwestia związana classpath (używamy Eclipse, ale nie polegamy na wtyczkach WTP). Jedyna różnica między nimi polega na tym, że wersja produkcyjna nie zawiera definicji jednostek.
Nie używamy szyderczego schematu do testowania JPA, ponieważ nie zwiększyłoby to wartości naszych testów. Testy uruchamiają rzeczywisty dostęp do danych za pomocą JPA, który komunikuje się z bazą danych PostgreSQL.
Nasze podejście do testów opiera się na wiosennym modelu testowym dla warstwy trwałości: testowanie w trakcie transakcji. Nasza aplikacja jest oparta na wiosennej wersji, ale to podejście jest równie przydatne dla dowolnych aplikacji, które chcą skorzystać z wiosennych klas testowych. Istotą jest to, że każdy test jest uruchamiany w ramach jednej transakcji, która nigdy nie zostanie zatwierdzona, a na końcu (w tearDown) zostanie automatycznie wycofana. Rozwiązuje to problem zanieczyszczenia danych i zależności testowych w bardzo miły, dyskretny i przejrzysty sposób.
Wiosenne ramy testowe są elastyczne, aby umożliwić testowanie wielu transakcji, ale są to specjalne przypadki, które stanowią nie więcej niż 10% testów.
Nadal używamy legacy support for JUnit 3.8, ale nowy Spring TestContext Framework dla JUnit 4 wygląda bardzo atrakcyjnie.
Do konfigurowania danych testowych w transakcjach używamy własnej klasy narzędziowej, która tworzy jednostki biznesowe. Ponieważ jest on dzielony na wszystkie testy, koszty ogólne utrzymania i obsługi są znacznie niższe dzięki korzyściom wynikającym ze standardowego i niezawodnego sposobu konfigurowania danych testowych.
Wiosny DI pomaga sprawić, by testy były zwięzłe i samoopisowe, ale nie jest to funkcja krytyczna.
Ten rodzaj testu, o którym Pan wspomniał, nie jest testem jednostkowym. Myślę, że to jest test integracyjny typu. Podczas pisania testu jednostkowego testujesz klasę ze wszystkimi wyodrębnionymi zależnościami. Używanie prawdziwej bazy danych (nawet baz danych w pamięci) w testach jednostkowych jest nieprawidłowe. –
To nie jest pełny test integracji. Jest ważny! To po prostu nie jest test jednostkowy. – Gilberto