私はMicrosoftロギングに依存するコードをテストしたいと思います。この方法で私は入力を検証しています。Microsoft.Practices.EnterpriseLibrary.Logging in MOQテストをバイパスしたい
「Loggerの静的クラスにLogWriterが設定されていません。Logger.SetLogWriterメソッドを呼び出すように設定してください。」というエラーが表示されます。 私のコードは以下の通りです。
public HttpResponseMessage Patch(long Id)
{
using (new Tracer(GetType().Namespace))
{
EnterpriseHeader entHeader = Request.GetEnterpriseHeaders();
Request.LogApiRequestReceived(_logger, entHeader, GetType().Name);
Request.VerifyIdFormat((ulong)CustomerId);
_bussinessObject.PatchData(Id, entHeader);
return Request.CreateResponse(HttpStatusCode.OK);
}
}
私は以下のコードを書いています。 Iloggerはカスタムロガーですが、私は嘲笑することができますが、 "New Tracer(Gettype()。NameSpace)"はモックできません。
var mocklogger = new Mock<ILogger>();
var mockTracer = new Mock<ITracer>();
mockTracer.Setup(x => x.Tracer(GetType().Namespace));
var Controller = new Controller(mockBO.Object, mocklogger.Object);
Controller.Request = AddHttpRequestForHeaders();
var Results = Controller.GetById(1517, true, false);
今、私はMoqのトレーサを募集したい。
私は部品番号でoboveコードをモック場合は、「追加情報モック=> mock.GetType():非仮想(VBでオーバーライド)メンバーの無効な設定」、つまり私にエラーを与える
と私部品番号のコードは
var mockTracer = new Mock<Tracer>();
mockTracer.Setup(x => x.GetType().Namespace);
おかげで、
ロガーは、それが困難なユニットテストでモックおよびテストすることができ、静的なクラスです。テスト中にモックすることができるインタフェースの背後にあるロガーを抽象化します。あなたのコードに関してより多くのコンテキストを提供する。あなたに良い答えを提供するのに十分な情報が与えられていません。 – Nkosi
私は "New Tracer(GetType()。NameSpace)"を模擬することができません。上記のコードをご覧ください。ありがとう – yogs