Junit5 supports automatic arguments conversion. There are three types of conversions.
a. Widening Conversion
b. Implicit Conversion
c. Explicit Conversion
Widening Conversion
Junit supports widening of primitive types that are supplied to @ParameterizedTest.
Example
byte to short, int, long, float, or double
short to int, long, float, or double
char to int, long, float, or double
int to long, float, or double
long to float or double
float to double
For example, a parameterized test annotated with @ValueSource(ints = { 1, 2, 3 }) can be declared to accept not only an argument of type int but also an argument of type long, float, or double.
Reference
https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2
Implicit Conversion
Junit has number of built-in implicit type converters.
Below table summarizes how the implicit type conversion happen.
Target Type |
Example |
boolean/Boolean |
"true" → true |
byte/Byte |
"15", "0xF", or "017" → (byte) 15 |
char/Character |
"o" → 'o' |
short/Short |
"15", "0xF", or "017" → (short) 15 |
int/Integer |
"15", "0xF", or "017" → 15 |
long/Long |
"15", "0xF", or "017" → 15L |
float/Float |
"1.0" → 1.0f |
double/Double |
"1.0" → 1.0d |
Enum subclass |
"SECONDS" → TimeUnit.SECONDS |
java.io.File |
"/path/to/file" → new File("/path/to/file") |
java.lang.Class |
"java.lang.Integer" → java.lang.Integer.class (use $ for nested classes, e.g. "java.lang.Thread$State") |
java.lang.Class |
"byte" → byte.class (primitive types are supported) |
java.lang.Class |
"char[]" → char[].class (array types are supported) |
java.math.BigDecimal |
"123.456e789" → new BigDecimal("123.456e789") |
java.math.BigInteger |
"1234567890123456789" → new BigInteger("1234567890123456789") |
java.net.URI |
"https://junit.org/" → URI.create("https://junit.org/") |
java.net.URL |
"https://junit.org/" → new URL("https://junit.org/") |
java.nio.charset.Charset |
"UTF-8" → Charset.forName("UTF-8") |
java.nio.file.Path |
"/path/to/file" → Paths.get("/path/to/file") |
java.time.Duration |
"PT3S" → Duration.ofSeconds(3) |
java.time.Instant |
"1970-01-01T00:00:00Z" → Instant.ofEpochMilli(0) |
java.time.LocalDateTime |
"2017-03-14T12:34:56.789" → LocalDateTime.of(2017, 3, 14, 12, 34, 56, 789_000_000) |
java.time.LocalDate |
"2017-03-14" → LocalDate.of(2017, 3, 14) |
java.time.LocalTime |
"12:34:56.789" → LocalTime.of(12, 34, 56, 789_000_000) |
java.time.MonthDay |
"--03-14" → MonthDay.of(3, 14) |
java.time.OffsetDateTime |
"2017-03-14T12:34:56.789Z" → OffsetDateTime.of(2017, 3, 14, 12, 34, 56, 789_000_000, ZoneOffset.UTC) |
java.time.OffsetTime |
"12:34:56.789Z" → OffsetTime.of(12, 34, 56, 789_000_000, ZoneOffset.UTC) |
java.time.Period |
"P2M6D" → Period.of(0, 2, 6) |
java.time.YearMonth |
"2017-03" → YearMonth.of(2017, 3) |
java.time.Year |
"2017" → Year.of(2017) |
java.time.ZonedDateTime |
"2017-03-14T12:34:56.789Z" → ZonedDateTime.of(2017, 3, 14, 12, 34, 56, 789_000_000, ZoneOffset.UTC) |
java.time.ZoneId |
"Europe/Berlin" → ZoneId.of("Europe/Berlin") |
java.time.ZoneOffset |
"+02:30" → ZoneOffset.ofHoursMinutes(2, 30) |
java.util.Currency |
"JPY" → Currency.getInstance("JPY") |
java.util.Locale |
"en" → new Locale("en") |
java.util.UUID |
"d043e930-7b3b-48e3-bdbe-5a3ccfb833db" → UUID.fromString("d043e930-7b3b-48e3-bdbe-5a3ccfb833db") |
Previous Next Home
No comments:
Post a Comment