Problem 當功能的測試案例寫完後,就是要開始針對較特殊的案例撰寫單元測試。log錯誤是一種錯誤回報的例外處理機制,而單元測試中,我們該如何捕捉到這些透過log回報的錯誤呢? Log4j可以透過ConsoleAppender將訊息給顯示到console上, 先前文章 也分享過驗證console內容的方法;然而我們不希望使用者看到這些內容,所以預設的log4j設定檔是不使用ConsoleAppender。 如果針對測試提供不同的log4j設定檔,也不是那麼的方便,因此我分享給大家另外一種方法,可以將Log4j訊息導到StringBuffer中以做驗證。 How to? 主要技巧是透過LogManager在測試之前加入WriterAppender,而WriterAppender會使用我給予的OutputStreamWriter: private StringBuffer mSB ; private StringBufferOutputStream mSBOutputStream ; private WriterAppender mTestAppender ; @Before public void setUp ( ) throws Exception { mSB = new StringBuffer ( ) ; mSBOutputStream = new StringBufferOutputStream ( mSB ) ; Writer w = new OutputStreamWriter ( mSBOutputStream ) ; mTestAppender = new WriterAppender ( ) ; mTestAppender. setLayout ( new PatternLayout ( PatternLayout. DEFAULT_CONVERSION_PATTERN ) ) ; mTestAppender. setName ( "test" ) ; mTestAppender. activateOptions ( ) ; mTestAppender. setWriter ( w ) ; LogManager. getLog...