Pisanie testów z JUnit5
Strukturyzuj testy
Pisanie testów z JUnit5 to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Czym jest JUnit5?
JUnit5 (JUnit Jupiter) to standardowy framework testowy dla JVM i Kotlin. Udostępnia adnotacje służące do oznaczania i porządkowania kodu testów.
- Testy znajdują się w
src/test/kotlin - Każdy test jest funkcją
- Moduł uruchamiający wykonuje testy i raportuje wyniki
Dodawanie zależności
Należy dodać JUnit Jupiter do konfiguracji testów i włączyć platformę JUnit.
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
}
tasks.test {
useJUnitPlatform()
}Pierwszy test
Należy oznaczyć funkcję adnotacją @Test. Test sprawdza określone założenie dotyczące kodu.
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.Assertions.assertEquals
class MathTest {
@Test
fun addsTwoNumbers() {
assertEquals(4, 2 + 2)
}
}Opisowe nazwy testów
@DisplayName pozwala uzyskać czytelne raporty testów bez stosowania długich nazw funkcji.
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.DisplayName
class OrderTest {
@Test
@DisplayName("total includes tax")
fun totalWithTax() {
// ...
}
}Konfiguracja za pomocą @BeforeEach
@BeforeEach uruchamia się przed każdym testem, dzięki czemu idealnie nadaje się do przygotowywania świeżych danych testowych. @AfterEach uruchamia się po każdym teście w celu wykonania czynności porządkowych.
import org.junit.jupiter.api.BeforeEach
class CartTest {
private lateinit var cart: MutableList<String>
@BeforeEach
fun setUp() {
cart = mutableListOf()
}
}Konfiguracja na poziomie klasy
@BeforeAll i @AfterAll uruchamiają się raz dla całej klasy. W Kotlin wymagają obiektu companion z @JvmStatic (lub cyklu życia na poziomie klasy).
import org.junit.jupiter.api.BeforeAll
class DbTest {
companion object {
@BeforeAll
@JvmStatic
fun connect() {
// open shared connection
}
}
}Arrange-Act-Assert
Każdy test należy podzielić na trzy wyraźne etapy:
- Arrange — przygotowanie danych wejściowych i stanu
- Act — wywołanie testowanego kodu
- Assert — sprawdzenie wyniku
Dzięki temu testy pozostają czytelne i skupione na jednym celu.
Testy zagnieżdżone
@Nested grupuje powiązane testy, tworząc raport w formie drzewa, który dokumentuje zachowanie.
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
class StackTest {
@Nested
inner class WhenEmpty {
@Test fun isEmpty() { /* ... */ }
}
}Testy sparametryzowane
Za pomocą @ParameterizedTest i źródła wartości można uruchomić ten sam test dla wielu danych wejściowych.
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.ValueSource
import org.junit.jupiter.api.Assertions.assertTrue
class NumberTest {
@ParameterizedTest
@ValueSource(ints = [2, 4, 6])
fun isEven(n: Int) {
assertTrue(n % 2 == 0)
}
}Wyłączanie i tagowanie
Test można tymczasowo pominąć za pomocą @Disabled, a testy grupować za pomocą @Tag, aby uwzględniać je lub wykluczać podczas uruchamiania CI.
import org.junit.jupiter.api.Disabled
import org.junit.jupiter.api.Tag
import org.junit.jupiter.api.Test
class FlakyTest {
@Test
@Disabled("fix later")
@Tag("slow")
fun pending() { }
}Samodzielny przykład
Oto prosta funkcja w czystym Kotlinie oraz idea jej testowania (sam test jest uruchamiany przez JUnit).
fun add(a: Int, b: Int): Int = a + b
fun main() {
val result = add(2, 3)
println(if (result == 5) "PASS" else "FAIL")
}Szybkie sprawdzenie
Przed każdą pojedynczą metodą testową potrzebna jest nowa, pusta lista. Która adnotacja będzie odpowiednia?
Podsumowanie
Można już porządkować testy JUnit5:
@Testoznacza testy, a@DisplayNamenadaje im nazwy@BeforeEach/@BeforeAllobsługują konfigurację początkową- Arrange-Act-Assert pomaga zachować przejrzystość testów
@Nestedi@ParameterizedTestporządkują testy i ułatwiają ich skalowanie
Następnie: asercje.
Ucz się Kotlin dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „Pisanie testów z JUnit5” jest bezpłatna?
Tak — pełny tekst „Pisanie testów z JUnit5” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Pisanie testów z JUnit5”?
Strukturyzuj testy Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?
Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Pisanie testów z JUnit5”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?
Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Pisanie testów z JUnit5
- Asercje
- Mockowanie z MockK
- Testowanie korutyn