天天看點

《Log4j 2 官方文檔》Testing in Maven

在 maven 中使用測試

maven在整個建構生命周期内可以運作單元測試和功能測試。預設情況下, 任何在 <code>src/test/resources</code> 路徑下的檔案都會複制到 <code>target/test-classes</code> 路徑中, 同時這些檔案在執行測試過程中,也會被包含在 <code>classpath</code> 中. 正因為這樣的特性,如果将一個 <code>log4j2-test.xml</code> 檔案放到 <code>src/test/resources</code> 目錄中, 這會替換掉目前正在使用的 <code>log4j2.xml</code> 或 <code>log4j2.json</code> 配置。是以, 在測試期間可以使用不同的日志配置,而不是目前在産品中使用的配置。

第二種方法是: 在測試類方法中使用 <code>@beforeclass</code> 注解設定 <code>log4j.configurationfile</code> 的屬性,這種方法在 <code>log4j 2</code>被大量使用。和第一種方法相比,測試的配置檔案可以使用任意檔案名。

第三種方法同樣在 <code>log4j 2</code> 中大量使用, 它使用了 <code>loggercontextrule junit</code> 測試規則, <code>loggercontextrule</code> 提供額外的便于測試的方法. 另外, 這種方法需要添加 <code>log4j-core test-jar</code>到 <code>test scope</code> 的依賴中.舉個例子

<code>public class awesometest {</code>

<code>@rule</code>

<code>public loggercontextrule init = new loggercontextrule("mytestconfig.xml");</code>

<code></code>

<code>@test</code>

<code>public void testsomeawesomefeature() {</code>

<code>final loggercontext ctx = init.getcontext();</code>

<code>final logger logger = init.getlogger("org.apache.logging.log4j.my.awesome.test.logger");</code>

<code>final configuration cfg = init.getconfiguration();</code>

<code>final listappender app = init.getlistappender("list");</code>

<code>logger.warn("test message");</code>

<code>final list&lt;logevent&gt; events = app.getevents();</code>

<code>// etc.</code>

<code>}</code>