1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

単体テストの時にlog4netで出力した内容を確認する方法

Posted at

はじめに

  • 単体テストケースにて、log4netで出力したメッセージも確認項目に含めたいときのメモ

単体テストプロジェクト側でのログ出力設定

  • テスト対象プロジェクト側にてlog4netでのログ出力の実装を行っていても、単体テスト側から処理を呼び出した場合、ログ出力は行われない
    (なんでかはちゃんと調べてない)
  • 単体テスト用プロジェクトのApp.configに同じようにアペンダー設定をつっこむとログ出力されるようになる
  • AppendToFileをfalseにすることでログ出力時、必ずローテーションを行うようにする(この方がテストしやすい)
App.config
  <configSections>
    <section name="log4net" type=" log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
  </configSections>
  <log4net>
    <appender name="SizeRollingLogToFile" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="ログファイル名"/>
      <param name="staticLogFileName" value="true"/>
      <param name="AppendToFile" value="false"/>
      <param name="MaxSizeRollBackups" value="0"/>
      <param name="RollingStyle" value="Size"/>
      <param name="MaximumFileSize" value="1MB"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] [%-5p] %c %M - %m%n"/>
      </layout>
    </appender>
    <root>
      <level value="INFO"/>
      <appender-ref ref="SizeRollingLogToFile"/>
    </root>
  </log4net>

単体テストでの確認

  • 単体テスト内でログファイルをStreamReaderで読もうとすると、log4net側と競合しSystem.IO.IOExceptionとなる
  • 仕方ないので別名ファイルにログを一時的にコピーし、そちらを読み込む
  • ログファイルの先頭行に確認したいメッセージが存在する場合、以下のようなイメージでテストする
SampleTest.cs
[TestMethod]
public void TestMethod()
{
    // テスト対象メソッドを実行
    適当なクラス.適当なメソッド();    

    // メインのログファイルは読み込めないため、確認用に一時的にコピー
    File.Copy("ログファイル", "一時的なログファイル", true);

    // ログファイルの読込み
    using (StreamReader file = new StreamReader("一時的なログファイル", Encoding.GetEncoding("shift_jis")))
    {
        // ファイルの先頭行を読み込み
        string line = file.ReadLine();
        // ログ内に適切な文言が存在するかどうか
        Assert.IsTrue(line.Contains("出力されるべきメッセージ"));
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?