我有以下方法:
@Component
public class WriteCsvToResponse {
private static final Logger LOGGER = LoggerFactory.getLogger(WriteCsvToResponse.class);
public void writeStatus(PrintWriter writer, Status status) {
try {
ColumnPositionMappingStrategy mapStrategy
= new ColumnPositionMappingStrategy();
mapStrategy.setType(Status.class);
String[] columns = new String[]{"id", "storeId", "status"};
mapStrategy.setColumnMapping(columns);
StatefulBeanToCsv btcsv = new StatefulBeanToCsvBuilder(writer)
.withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
.withMappingStrategy(mapStrategy)
.withSeparator(',')
.build();
btcsv.write(status);
} catch (CsvException ex) {
LOGGER.error("Error mapping Bean to CSV", ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用正确测试它mockito。
使用它可以将对象状态包装为csv格式。我使用StringWriter将响应包装在其中。没有更多的细节了,但是似乎我必须创建一些单词以通过验证:)
您不需要嘲笑来测试此方法,只需一个即可java.io.StringWriter。
这是您为名义使用编写测试的方法:
@Test
void status_written_in_csv_format() {
// Setup
WriteCsvToResponse objectUnderTest = new WriteCsvToResponse ();
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
// Given
Status status = ...
// When
objectUnderTest.writeStatus(printWriter, status);
// Then
String actualCsv = stringWriter.toString();
assertThat(actualCsv.split("\n"))
.as("Produced CSV")
.containsExactly(
"id,storeId,status",
"42,142,OK");
}
Run Code Online (Sandbox Code Playgroud)
此示例假定了有关您的Status对象的一些事情,但是您已经有了一般的想法。对于断言,我使用AssertJ,但是您可以对JUnit5内置断言执行相同的操作。
希望这可以帮助 !