これは、コード単体テストロギングですか?
public class A {
private static final Log LOG = LogFactory.getLog(A.class);
と利用
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw e;
}
にロギング機能を確認するのが一般的だが、私はそのようなコードのためにも、単一のユニットテストを見たことがありません。
もちろん、例外と例外の例外を投げますが、ロギング情報をチェックするためのテストを書くべきですか?私は、ロギングがシステムの動作のもう一つの部分であると考える傾向があるので、テストではロギングを避けるために論理的に終了します。
私はそれをカバーしなければならないと仮定すると、模擬ログを挿入し、予期されたメッセージで「エラー」メソッドが呼び出されたことを確認するために、元のコードを変更する必要があることを意味します。しかし、元のクラスがサービスであり、それが春までにインスタンス化されている場合はどうすればよいですか?
は私の質問で言及したのと同じアプローチです。しかし、私にとっては、通常はすべてのクラス用に作成されたログなので、春のサービスの場合はどうすればいいのかはっきりしていないので、クラス固有であり、シングルトンとしてはできません。 –
Logオブジェクトをインスタンス化するコードを制御できない場合は、模擬ログを使用できないため、動作をテストすることは困難です。実際のLogオブジェクトでログを記録させてから、メッセージが記録されたことを確認することができます。しかし、それは自動化するのが難しいです! –
いいえ、私はロギングコードをテストすることに同意しました。これは、LOGのセッターが必要なことを意味するので、テストでモックログを渡すことは可能ですが、スプリングサービスの場合はどうすればよいでしょうか。私は2つの可能な方法について考えている:1)セッターを持っているが、テストからのみ呼び出すことができる(春は自動注入を行うことができるので、そのような可視性を制限するのが難しいかもしれない)、2)ロガーを春から注入する。適切なロガーをインスタンス化します。 –