亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 PrintWriter 測試方法?

如何使用 PrintWriter 測試方法?

開滿天機 2021-09-12 20:35:52
我有以下方法:@Componentpublic 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);        }    }我不知道如何正確使用mockito.使用它來將對象狀態包裝成csv格式。我使用 StringWriter 將響應包裝在其中。沒有更多細節了,但似乎我必須創建一些單詞才能通過驗證:)
查看完整描述

3 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

你不需要 mockito 來測試這個方法,只需要一個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");

}

這個例子假設了一些關于你的Status對象的事情,但你有一般的想法。對于斷言,我使用AssertJ,但您可以使用 JUnit5 內置斷言執行相同操作。


查看完整回答
反對 回復 2021-09-12
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

您可以編寫這樣的測試并更改 write 方法中的輸入:


    @Test

    public void test() {

        WriteCsvToResponse writeCsvToResponse = mock(WriteCsvToResponse.class);


        doAnswer(new Answer() {

            public Object answer(InvocationOnMock invocation) {

                Object[] args = invocation.getArguments();

                write((Status)args[1]);

                return null;

            }

        }).when(writeCsvToResponse).writeStatus(any(PrintWriter.class),any(Status.class));


        writeCsvToResponse.writeStatus(writer, status);

    }


    public void write(Status status) {

//      do anythings you like with status

    }


查看完整回答
反對 回復 2021-09-12
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

稍微重構一下,其中 Builder 是注入到該組件中的 Spring Bean。

然后,您可以模擬該構建器以返回模擬的 StatefulBeanToCsv,特別是 write 方法,您可以在其中編寫條件和斷言。如果遇到錯誤,則拋出一些未經檢查的異常,例如 IllegalStateException,如果一切正常,則不拋出任何內容


查看完整回答
反對 回復 2021-09-12
  • 3 回答
  • 0 關注
  • 285 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號