@CsvSource is a repeatable
ArgumentsSource which reads comma-separated values (CSV) from one
or more CSV records supplied via the value attribute or
textBlock attribute.
The supplied values will be provided as arguments to the annotated
@ParameterizedClass or
@ParameterizedTest.
The column delimiter (which defaults to a comma (,)) can be customized
via either delimiter or delimiterString.
By default, @CsvSource uses a single quote (') as its quote
character, but this can be changed via quoteCharacter. See the
'lemon, lime' examples in the documentation for the value
and textBlock attributes. An empty, quoted value ('') results
in an empty String unless the emptyValue attribute is set;
whereas, an entirely empty value is interpreted as a null reference.
By specifying one or more nullValues a custom value can be interpreted
as a null reference (see the User Guide for an example). An
ArgumentConversionException is thrown if the target type of a null
reference is a primitive type.
Note
An unquoted empty value will always be converted to a
null reference regardless of any custom values configured via the
nullValues attribute.
Except within a quoted string, leading and trailing whitespace in a CSV
column is trimmed by default. This behavior can be changed by setting the
ignoreLeadingAndTrailingWhitespace attribute to true.
In general, CSV records should not contain explicit newlines (\n)
unless they are placed within quoted strings. Note that CSV records supplied
via textBlock will implicitly contain newlines at the end of each
physical line within the text block. Thus, if a CSV column wraps across a
new line in a text block, the column must be a quoted string.
Note that delimiter (or delimiterString),
quoteCharacter, and commentCharacter (when
textBlock is used) are treated as control characters.
delimiter and quoteCharacter must always be distinct.commentCharacter must be distinct from the others only when
textBlock is used.This annotation is inherited to subclasses.
CsvFileSource, org.junit.jupiter.params.provider.ArgumentsSource , org.junit.jupiter.params.ParameterizedClass , org.junit.jupiter.params.ParameterizedTest
| Modifier and Type | Method and Description |
|---|---|
| public char | |
| public char | |
| public String | |
| public String | |
| public boolean | ignoreLeadingAndTrailingWhitespace()
Controls whether leading and trailing whitespace characters of unquoted CSV columns should be ignored. |
| public int | |
| public String[] | |
| public char | |
| public String | textBlock()
The CSV records to use as the source of arguments, supplied as a single text block; must not be empty. |
| public boolean | useHeadersInDisplayName()
Configures whether the first CSV record should be treated as header names for columns. |
| public String[] |
| commentCharacter | back to summary |
|---|---|
| public char commentCharacter() The character used to denote comments in a text block. Any line that begins with this character will be treated as a comment and ignored during parsing. Note that there is one exception to this rule: if the comment character appears within a quoted field, it loses its special meaning. The comment character must be the first character on the line without any leading whitespace. Defaults to
| |
| delimiter | back to summary |
|---|---|
| public char delimiter() The column delimiter character to use when reading the records. This is an alternative to Defaults implicitly to | |
| delimiterString | back to summary |
|---|---|
| public String delimiterString() The column delimiter string to use when reading the records. This is an alternative to Defaults implicitly to
| |
| emptyValue | back to summary |
|---|---|
| public String emptyValue() The empty value to use when reading the records. This value replaces quoted empty strings read from the input. Defaults to
| |
| ignoreLeadingAndTrailingWhitespace | back to summary |
|---|---|
| public boolean ignoreLeadingAndTrailingWhitespace() Controls whether leading and trailing whitespace characters of unquoted CSV columns should be ignored. Whitespace refers to characters with Unicode code points less than
or equal to Defaults to | |
| maxCharsPerColumn | back to summary |
|---|---|
| public int maxCharsPerColumn() The maximum number of characters allowed per CSV column. Must be a positive number or Defaults to | |
| nullValues | back to summary |
|---|---|
| public String[] nullValues() A list of strings that should be interpreted as For example, you may wish for certain values such as Please note that unquoted empty values will always be converted
to Defaults to
| |
| quoteCharacter | back to summary |
|---|---|
| public char quoteCharacter() The quote character to use for quoted strings. Defaults to a single quote ( You may change the quote character to anything that makes sense for
your use case; however, the primary use case is to allow you to use double
quotes in | |
| textBlock | back to summary |
|---|---|
| public String textBlock() The CSV records to use as the source of arguments, supplied as a single text block; must not be empty. Defaults to an empty string. You therefore must supply CSV content
via this attribute or the Text block syntax is supported by various languages on the JVM
including Java SE. If text blocks are not supported, you
should declare your CSV content via the Each record in the text block corresponds to a record in a CSV file and will
be split using the specified In contrast to CSV records supplied via The comment character must be the first character on the line without
any leading whitespace. It is therefore recommended that the closing text block
delimiter Java's text block feature automatically removes incidental whitespace when the code is compiled. However, other JVM languages such as Groovy and Kotlin do not. Thus, if you are using a programming language other than Java and your text block contains comments or new lines within quoted strings, you will need to ensure that there is no leading whitespace within your text block. Example
@ParameterizedTest
@CsvSource(quoteCharacter = '"', textBlock = """
# FRUIT, RANK
apple, 1
banana, 2
"lemon, lime", 0xF1
strawberry, 700_000
""")
void test(String fruit, int rank) {
// ...
}
| |
| useHeadersInDisplayName | back to summary |
|---|---|
| public boolean useHeadersInDisplayName() Configures whether the first CSV record should be treated as header names for columns. When set to Defaults to Example
@ParameterizedTest(name = "[{index}] {arguments}")
@CsvSource(useHeadersInDisplayName = true, textBlock = """
FRUIT, RANK
apple, 1
banana, 2
'lemon, lime', 0xF1
strawberry, 700_000
""")
void test(String fruit, int rank) {
// ...
}
| |
| value | back to summary |
|---|---|
| public String[] value() The CSV records to use as the source of arguments; must not be empty. Defaults to an empty array. You therefore must supply CSV content
via this attribute or the Each value corresponds to a record in a CSV file and will be split using
the specified If text block syntax is supported by your programming language,
you may find it more convenient to declare your CSV content via the
Example
@ParameterizedTest
@CsvSource({
"apple, 1",
"banana, 2",
"'lemon, lime', 0xF1",
"strawberry, 700_000"
})
void test(String fruit, int rank) {
// ...
}
| |