Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla
Suorita sama testi useilla syötejoukoilla käyttämällä @ParameterizedTest-, @CsvSource- ja @MethodSource-annotaatioita.
Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
Miksi parametroidut testit?
Saman testilogiikan suorittaminen useilla syötejoukoilla paljastaa reunatapauksia ilman testimetodien kopioimista. JUnit 5 tukee parametroiduja testejä suoraan @ParameterizedTest-annotaatiolla.
@ValueSource: yksinkertaiset yhden arvon testit
@ValueSource antaa yhden tietyn tyyppisen parametrin. Testi suoritetaan kerran jokaista arvoa kohden.
@ParameterizedTest
@ValueSource(strings = {"", " ", "\t"})
void blank_strings_are_rejected(String input) {
assertThrows(IllegalArgumentException.class, () -> validator.validate(input));
}@CsvSource: useita parametreja suoraan
@CsvSource antaa pilkuilla eroteltuja arvorivejä. Jokainen rivi on yksi testikutsu. Käyttäkää yksittäisiä lainausmerkkejä pilkkujen suojaamiseen merkkijonoarvoissa.
@ParameterizedTest
@CsvSource({
"Alice, 30, true",
"Bob, 17, false",
"Carol, 0, false"
})
void test_adult_check(String name, int age, boolean expectedAdult) {
User user = new User(name, age);
assertEquals(expectedAdult, user.isAdult());
}@CsvSource ja delimiterString
Käyttäkää delimiterString-parametria monimerkkisiin erottimiin tai silloin, kun data sisältää pilkkuja. nullValues-parametrilla voitte muuntaa ennalta määritetyn merkkijonon null-arvoksi.
@ParameterizedTest
@CsvSource(value = {
"Alice | 30 | ADMIN",
"Bob | 25 | USER"
}, delimiterString = "|")
void test_roles(String name, int age, String role) { ... }@CsvFileSource: ulkoiset datatiedostot
Ladatkaa testidata classpathissa olevasta CSV-tiedostosta. Tämä on hyödyllistä suurille aineistoille, jotka muuten tekisivät testikoodista vaikeasti luettavaa.
@ParameterizedTest
@CsvFileSource(resources = "/test-data/users.csv", numLinesToSkip = 1)
void test_from_file(String name, int age, boolean expected) {
assertEquals(expected, service.isEligible(name, age));
}@MethodSource: monimutkaiset parametrit
@MethodSource kutsuu staattista factory-metodia, joka palauttaa Stream<Arguments>-olion. Jokainen Arguments.of() on yksi testikutsu. Käyttäkää tätä monimutkaisten olioiden kanssa.
@ParameterizedTest
@MethodSource("provideOrders")
void test_total_calculation(Order order, BigDecimal expected) {
assertEquals(expected, orderService.calculateTotal(order));
}
static Stream<Arguments> provideOrders() {
return Stream.of(
Arguments.of(new Order(List.of(item(10), item(20))), BigDecimal.valueOf(30)),
Arguments.of(new Order(List.of()), BigDecimal.ZERO)
);
}@EnumSource: kaikkien enum-arvojen testaaminen
@EnumSource suorittaa testin kerran jokaista enum-vakiota kohden. Käyttäkää mode- ja names-parametreja tiettyjen arvojen sisällyttämiseen tai poissulkemiseen.
@ParameterizedTest
@EnumSource(value = UserStatus.class, mode = EnumSource.Mode.EXCLUDE, names = "DELETED")
void test_active_statuses(UserStatus status) {
assertTrue(notificationService.shouldNotify(status));
}@NullAndEmptySource
Lyhyt muoto null- ja tyhjien merkkijonojen syötteiden testaamiseen. Voitte yhdistää @ValueSource-annotaation lähteisiin @NullSource + @EmptySource tai käyttää yhdistettyä @NullAndEmptySource-annotaatiota.
@ParameterizedTest
@NullAndEmptySource
void null_and_empty_are_invalid(String input) {
assertFalse(validator.isValid(input));
}Mukautetut näyttönimet
Muotoilkaa testin näyttönimi käyttämällä name-parametria annotaatiossa @ParameterizedTest. Paikkamerkit ovat: {index}, {0}, {1} ja {arguments}.
@ParameterizedTest(name = "age={1} should be adult={2}")
@CsvSource({"Alice, 30, true", "Bob, 17, false"})
void test_adult(String name, int age, boolean expected) { ... }Lähteiden yhdistäminen @ArgumentsSource-annotaatiolla
Toteuttakaa ArgumentsProvider täysin mukautettua argumenttien generointia varten — dynaamista dataa voidaan hakea tietokannoista, tiedostoista tai API-rajapinnoista.
public class UserArgumentsProvider implements ArgumentsProvider {
public Stream<? extends Arguments> provideArguments(ExtensionContext ctx) {
return Stream.of(
Arguments.of(new User("Alice", 30)),
Arguments.of(new User("Bob", 17))
);
}
}
@ParameterizedTest
@ArgumentsSource(UserArgumentsProvider.class)
void test_user(User user) { ... }Parametroidut testit raja-arvoille
Testatkaa rajaehdot järjestelmällisesti: min-1, min, max ja max+1. Parametroidut testit tekevät raja-arvojen kattavuudesta helposti luettavaa ja ylläpidettävää.
@ParameterizedTest
@CsvSource({"0, false", "1, true", "100, true", "101, false"})
void test_range_boundaries(int value, boolean expected) {
assertEquals(expected, validator.isInRange(value, 1, 100));
}Pikatarkistus
Minkä palautustyypin @MethodSource tarjoaa kunkin testikutsun argumentit?
Kertaus
Käyttäkää @CsvSource-annotaatiota suoraan kirjoitettuihin taulukkomuotoisiin tietoihin, @MethodSource-annotaatiota monimutkaisiin olioihin, @EnumSource-annotaatiota kaikkien enum-arvojen testaamiseen ja @NullAndEmptySource-annotaatiota null-arvojen ja tyhjien syötteiden reunatapauksiin. Mukautetut nimet name=-parametrilla parantavat testien luettavuutta.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla” ilmainen?
Kyllä – oppitunnin ”Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla”?
Suorita sama testi useilla syötejoukoilla käyttämällä @ParameterizedTest-, @CsvSource- ja @MethodSource-annotaatioita. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Parametrisoidut testit @CsvSource- ja @MethodSource-annotaatioilla
- Mockito edistyneesti: argumenttikaappaajat ja vakoilijat
- Spring Boot -testiviipaleet: @WebMvcTest ja @DataJpaTest
- Testcontainers: integraatiotestit oikealla tietokannalla