Testowanie funkcji suspend i Flow
Używaj runTest i Turbine do sprawdzania zachowania asynchronicznego.
Testowanie funkcji suspend i Flow to bezpłatna lekcja Kotlin Multiplatform Academy na CoddyKit. To lekcja 2 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 Multiplatform Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Multiplatform Academy zawiera 4 lekcji w sumie.
Kod asynchroniczny wymaga specjalnych testów
Funkcje zawieszane i obiekty Flow nie kończą działania natychmiast, dlatego potrzebujesz narzędzi, które zaczekają na zakończenie pracy asynchronicznej przed wykonaniem asercji. ⏳
Poznaj runTest
Umieść asercje asynchroniczne w runTest z biblioteki coroutines-test; funkcja ta udostępnia zakres i automatycznie pomija wirtualne opóźnienia.
@Test
fun loadsUser() = runTest {
val u = repo.load(1)
assertEquals("Sam", u.name)
}Dodaj pomocnik testowy
Dodaj kotlinx-coroutines-test do commonTest, aby runTest i powiązane narzędzia były dostępne na każdym celu.
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0")Oczekiwanie na wynik funkcji zawieszanej
Wewnątrz runTest wystarczy bezpośrednio wywołać funkcję suspend i sprawdzić to, co zwróci.
val total = calc.fetchTotal()
assertEquals(42, total)Przeskoki w czasie za darmo
runTest korzysta z wirtualnego czasu, więc delay trwający kilka sekund kończy się natychmiast, a testy pozostają szybkie.
Ręczne testowanie Flow
Można zebrać skończony Flow do listy za pomocą toList i sprawdzić wyemitowane wartości.
val values = numbers().toList()
assertEquals(listOf(1, 2, 3), values)Dlaczego Turbine pomaga
W przypadku ciągłych strumieni biblioteka Turbine pozwala oczekiwać na elementy pojedynczo, bez ręcznego przygotowywania obsługi kolekcjonowania.
Dodawanie Turbine
Dodaj Turbine do commonTest. To niewielkie, wieloplatformowe narzędzie pomocnicze stworzone specjalnie do testowania Flow.
implementation("app.cash.turbine:turbine:1.1.0")Oczekiwanie na elementy za pomocą test
Turbine opakowuje Flow w blok test, w którym awaitItem zwraca kolejne emisje w odpowiedniej kolejności.
flow.test {
assertEquals(1, awaitItem())
awaitComplete()
}Poprawne kończenie strumienia
Każdy blok Turbine należy zakończyć za pomocą awaitComplete albo anulować. W przeciwnym razie test zakończy się niepowodzeniem z powodu nieodczytanych zdarzeń.
Sprawdzanie aktualizacji StateFlow
Turbine świetnie sprawdza się w przypadku StateFlow: należy odczekać na wartość początkową, wywołać akcję, a następnie odczekać na kolejny wyemitowany stan.
Szybkie sprawdzenie
Wybierz właściwe opakowanie do testowania kodu asynchronicznego.
Podsumowanie
Używaj runTest do kodu suspend oraz bloku test biblioteki Turbine do oczekiwania na emisje Flow — wszystko w commonTest.
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
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Testowanie funkcji suspend i Flow” jest bezpłatna?
Tak — pełny tekst „Testowanie funkcji suspend i Flow” 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 Multiplatform Academy, przejdź na CoddyKit PRO. Kurs Kotlin Multiplatform Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Testowanie funkcji suspend i Flow”?
Używaj runTest i Turbine do sprawdzania zachowania asynchronicznego. Ćwiczysz Kotlin Multiplatform 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 Multiplatform Academy?
Nie wymagamy żadnego doświadczenia. Kotlin Multiplatform 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 2 z 4.
Ile czasu zajmuje lekcja „Testowanie funkcji suspend i Flow”?
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 Multiplatform Academy?
Tak. Każda lekcja Kotlin Multiplatform 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
- kotlin.test w commonTest
- Testowanie funkcji suspend i Flow
- Atrapy klienta Ktor i repozytoriów
- Uruchamianie testów dla celów Androida i iOS