Jak rozpoznać czy uruchomiono wybrane testy czy wszystkie?

0

Witam,

Używam Gradle-a do budowania projektu. W standardowym przypadku aby uruchomić testy mogę wpisać komendę ./gradlew test - wtedy powinny uruchomić się wszystkie testy (mój przypadek nie jest tak do końca standardowy i działa to trochę inaczej ale na potrzeby tej dyskusji możemy przyjąć takie domyślne założenie). Mogę również użyć komendy ./gradlew test --tests "[konkretny test lub konkretny zbiór testów]" - wtedy uruchomią się tylko te testy które chcę (zazwyczaj jeden lub wiele testów z jednej klasy). Moje pytanie brzmi: czy można z poziomu pliku build.gradle rozpoznać czy została użyta opcja --tests?

Po co mi to? Generalnie chciałbym podzielić testy na dwie grupy: na potrzeby tego posta niech to będzie grupa A i B. Ponadto chciałbym, żeby testy z grupy A uruchamiały się po użyciu komendy ./gradlew test a testy z grupy B po użyciu innej komendy (na potrzeby tego posta niech to będzie komenda ./gradlew testB).

Udało mi się zmodyfikować plik build.gradle do postaci, w której mogę zdecydować, którą grupę testów uruchomić. Moje rozwiązanie polega na tym, że w domyślnym przypadku testy z grupy B są na liście testów ignorowanych. W przypadku gdy wydam komendę mającą na celu uruchomienie testów z grupy B lista testów ignorowanych się zmienia i uruchamiają się właściwe testy.

Generalnie wszystko działa tylko nie do końca dobrze pracuje mi się z testami z poziomu IDE. Czasem potrzebuje uruchomić test z grupy B za pomocą kliknięcia przycisku "play" z poziomu IDE. Wtedy InteliJ uruchamia polecenie ./gradlew test --tests "[konkretny test lub konkretny zbiór testów]". Jednak z racji tego, że taki test jest na liście ignorowanych dostaje komunikat No tests found for given includes.

Gdybym potrafił rozpoznać czy została użyta opcja --test to bym w takim przypadku nie dodawał testów z grupy B do listy testów ignorowanych i wszystko by działało tak jak chce zarówno z poziomu konsoli jak i IDE.

1

A myślałeś po prostu o tagach: https://mkyong.com/junit5/junit-5-tagging-and-filtering-tag-examples/ ?
Do tego są też test suity: https://howtodoinjava.com/junit5/junit5-test-suites-examples/

Osobiście polecam JUnit5 - bardzo przyjemny w użyciu, nie ma żadnych dziwnych problemów nawet w niestandardowych przypadkach.

2

Po modyfikacji teraz to ma sens i brzmi że

UPDATE hm jakieś to popieprzone w tym gradle. Zresztą jak cały gradle. Ale szedłbym w tym kierunku jak to jest opisane w dokumentacji

2

Udało mi się rozwiązać problem, ale trochę inaczej:

  1. Skorzystałem z rady @0xmarcin i użyłem kategorii wbudowanych w JUnit

  2. Skorzystałem z rady @obscurity odnośnie tego aby testy z obu grup były uruchamiane za pomocą komendy test. Testy z grupy B uruchamiam w pierwszej kolejności.

  3. Mam możliwość wyłączenia testów z grupy B z poziomu wiersza poleceń poprzez ustawienie odpowiedniego parametru.

Od strony Gradle wygląda to tak:

task customIntegrationTests(type: Test) {
    useJUnit {
        includeCategories '[klasa kategorii]'
    }
}

test {
    useJUnit {
        excludeCategories '[klasa kategorii]'
    }
}

if (!System.properties.containsKey("skipCustomIntegrationTests")) {
    tasks.test.dependsOn('customIntegrationTests')
}

Testy z grupy B ignoruje w następujący sposób: ./gradlew -DskipCustomIntegrationTests

Dziękuje wszystkim uczestnikom za udział w dyskusji.

0

Przed erą JUnit 5 Gradle kiedyś miało sens. Teraz JUnit 5 + biblioteka AssertJ i naprawdę niczego ci więcej nie trzeba.

0

@Korges: nie rozumiem, co ma narzędzie do budowania do frameworku testowego?

1 użytkowników online, w tym zalogowanych: 0, gości: 1