2017-02-13 2 views
0

私は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); 

おかげで、

+1

ロガーは、それが困難なユニットテストでモックおよびテストすることができ、静的なクラスです。テスト中にモックすることができるインタフェースの背後にあるロガーを抽象化します。あなたのコードに関してより多くのコンテキストを提供する。あなたに良い答えを提供するのに十分な情報が与えられていません。 – Nkosi

+0

私は "New Tracer(GetType()。NameSpace)"を模擬することができません。上記のコードをご覧ください。ありがとう – yogs

答えて

0

モックを作成するために、モックフレームワークを使用しない方が良い場合があります。特にシングルトンスタッフは模擬するのが難しいです。この場合は、何もしないようにログを設定するだけです。テストダブルのこの種のは、偽物と呼ばれます:https://www.martinfowler.com/bliki/TestDouble.html

は、偽のログ・ライターを作成するには、この記事を参照してください。https://martinwilley.com/net/code/entliblognoconfig.html

関連する問題