IntelliJ IDEA — jak uruchomić testy ze wszystkich modułów

March 08, 2017

Obrazek wpisu "IntelliJ IDEA — jak uruchomić testy ze wszystkich modułów"

Jeśli jesteś zwolennikiem pisania testów, to być może zdarzyła Ci się taka chęć: chciałbym uruchomić wszystkie testy zdefiniowane w projekcie. Czy wiesz jak to zrobić w IntelliJ IDEA, jeśli projekt posiada więcej niż 1 moduł? Ja dowiedziałem się niedawno i żałuję, że dopiero teraz 🙂

Założenia

Przyjmuję następujące założenia dotyczące projektu i sposobu pracy:

Przykładowa struktura takiego projektu:

.
├── build/
├── build.gradle
├── domain/
│   ├── build/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       └── test/
├── http-api/
│   ├── build/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       └── test/
├── integration-tests/
│   ├── build/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       └── test/
├── persistence/
│   ├── build/
│   ├── build.gradle
│   └── src/
│       ├── main/
│       └── test/
└── runner/
    ├── build/
    ├── build.gradle
    └── src/
        ├── main/
        └── test/

Rozwiązanie

Po sesji googlania i eksperymentowania z IDE dotarłem do następującego rozwiązania:

  1. Utwórz konfiguracje testowe poszczególnych modułów, np. All in persistence_test (taką nazwę generuje moje IDE dla testów modułu persistence) czy All in integration-tests_test
  2. Wejdź do Run | Edit Configurations... i zapisz te z konfiguracji, które nie są jeszcze zapisane. Niezapisane konfiguracje rozpoznasz po tym, że ich ikony są przyszarzone.
  3. Wejdź w edycję tej konfiguracji, która ma być ostatnią z wielu. Na przykład chcesz, aby testy modułu integration-tests były uruchomione na samym końcu.
  4. W sekcji Before launch dodaj kroki, które mają wykonać się przed uruchomieniem aktualnie edytowanej konfiguracji. Są to kroki typu Add Another Configuration. W ten sposób możesz dodać po kolei wszystkie konfiguracje z testami z innych modułów. Istotne, abyś nie dodał testów modułu, którego konfigurację właśnie edytujesz – raczej nie chcesz czekać na ich wykonanie dwa razy dłużej 😉
  5. Przypilnuj, aby dopiero co dodane kroki występowały po kroku Build, a nie przed nim.
  6. Zmień nazwę edytowanej konfiguracji na taką, która lepiej odzwierciedli jej nowe znaczenie, np. ALL TESTS.

Uruchomienie tak przygotowana konfiguracji zaowocuje uruchomieniem jedna po drugiej konfiguracji zdefiniowanych w sekcji Before launch, a po nich – tej ostatniej.

W przypadku mojego projektu lista konfiguracji wygląda tak:

Konfiguracje testowe wraz z konfiguracją zbiorczą "IntelliJ IDEA — jak uruchomić testy ze wszystkich modułów"

Konfiguracja ALL TESTS to de facto testy modułu integration-tests poprzedzone uruchomieniem innych konfiguracji:

Szczegóły konfiguracji zbiorczej "IntelliJ IDEA — jak uruchomić testy ze wszystkich modułów"

Uruchomienie jej skutkuje wykonaniem sekwencji:

Uruchomiona sekwencja konfiguracji "IntelliJ IDEA — jak uruchomić testy ze wszystkich modułów"

Podsumowanie

Rozwiązanie, które przedstawiłem, nie jest bez wad. Głównym problemem jest, moim zdaniem, konieczność „wyklikania” zbiorczej konfiguracji, a potem utrzymywania wraz z dodawaniem, usuwaniem i edytowaniem modułów projektu. Nie zmienia to jednak faktu, że taka zbiorcza konfiguracja testowa może się czasem przydać.

Czy przyda się Tobie? Ja tego nie wiem, ale Ty być może chcesz podzielić się przemyśleniami w komentarzu do tego wpisu 🙂 A może znasz lepsze rozwiązanie, które mi się przyda? 😉