如何使用PrintWriter测试方法?

Joh*_*ohn 1 java csv mockito

我有以下方法:

@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将响应包装在其中。没有更多的细节了,但是似乎我必须创建一些单词以通过验证:)

Loï*_*yen 5

您不需要嘲笑来测试此方法,只需一个即可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内置断言执行相同的操作。

希望这可以帮助 !