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

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

編寫處理行尾斷言的跨平臺單元測試

編寫處理行尾斷言的跨平臺單元測試

一只斗牛犬 2021-10-20 10:54:42
我正在使用 JUnit 來測試程序的打印輸出。我通過設置System.out為我自己的PrintStream打印到ByteArrayOutputStream. 我的測試通常是這樣的:assertEquals("Some line of text\r\n", output);我對如何讓這段代碼跨平臺工作感興趣。如果我在 linux 上運行這些測試,所有這些測試都會失敗。我可以編寫更復雜的測試,它接受\r\n或\n在輸出中接受,但如果可能的話,我想保持測試簡單。有沒有辦法設置打印的換行符類型println()?
查看完整描述

3 回答

?
翻閱古今

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

您應該保持系統的默認行為,并更改您的斷言代碼:


String EOL = System.getProperty("line.separator")

assertEquals("Some line of text" + EOL, output);

為什么?EOL (end-of-line, or line-separator) 依賴于系統,如果你改變默認行為,你可能會遇到其他奇怪的錯誤。


在您的情況下,您可以在自己的字符串中更改 EOL 就足夠了。


其他(可能不好)方法可能包括:替換所有\r\n和\r到\n并使用\n來比較所有輸出,不使用PrintStream而是自己構建字符串等。


查看完整回答
反對 回復 2021-10-20
?
小唯快跑啊

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

對于 JUnit 4,系統規則庫有助于此類測試。它也支持行尾規范化。測試看起來像


public class MyTest {

  @Rule

  public final SystemOutRule systemOutRule = new SystemOutRule().enableLog();


  @Test

  public void writesTextToSystemOut() {

    System.out.print(String.format("Some line of text%n)");

    assertEquals(

      "Some line of text\n",

      systemOutRule.getLogWithNormalizedLineSeparator()

    );

  }

}

完全披露:我是系統規則的作者。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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