2011-06-24 17 views
3

あるときに、私はこのクラスのServizioControllerユニットテストをしようとしています、非オーバーライド部材に無効なセットアップを投げている:このクラスは、テストの一部またはある場合部品番号は、クラスがサービス・プロジェクトで

public class ServizioController : IServizioController 
{ 

    public virtual void PerformAction(Super.Core.Servizio servizio) 
    { 
    } 

    public virtual bool Start() 
    { throw new NotImplementedException(); } 

    public virtual bool Stop() 
    { throw new NotImplementedException(); } 

    public virtual bool Continue() 
    { throw new NotImplementedException(); } 
} 

それは罰金行きます図書館プロジェクト。しかし、それはサービス・プロジェクトである場合には、部品番号が私にこのエラーがスローされます。

Invalid setup on a non-overridable member: x => x.Start() 

私のテストは、次のようになります。

[TestMethod] 
     public void ServizioController_PerformAction_Start() 
     { 
      //Arrange 
      bool _start, _stop, _continue; 
      _start = _stop = _continue = false; 


      Super.Core.Servizio s = new Super.Core.Servizio() 
      { 
       Action = ServizioAction.START.ToString() 
      }; 

      var mock = new Mock<ServizioController>() { CallBase = true };; 
      mock.Setup(x => x.Start()) 
       .Callback(() => _start = true); 
      mock.Setup(x => x.Stop()) 
       .Callback(() => _stop = true); 
      mock.Setup(x => x.Continue()) 
       .Callback(() => _continue = true); 

      //Act 
      mock.Object.PerformAction(s); 

      //Assert 
      Assert.IsTrue(_start); 
      Assert.IsFalse(_stop); 
      Assert.IsFalse(_continue); 
     } 

私は続けて喜んので、このクラスは、参加しようとしていますライブラリのクラス、誰かが私にこの動作を説明することができれば、私はより幸せになる...

おかげで、

答えて

0

あなたSetup方法はを持っている必要がありますあなたが嘲笑しているメソッドはすべてboolを返します。サイドノートでは

mock.Setup(x => x.Start()).Returns(true); 

、あなたはVerifyとして、このインスタンスでCallbackを使用する必要はありませんあなた

public void ServizioController_PerformAction_Start() 
    { 
     //Arrange 
     Super.Core.Servizio s = new Super.Core.Servizio() 
     { 
      Action = ServizioAction.START.ToString() 
     }; 

     var mock = new Mock<ServizioController>() { CallBase = true }; 
     mock.Setup(x => x.Start()).Returns(true); 
     mock.Setup(x => x.Stop()).Returns(true); 
     mock.Setup(x => x.Continue()).Returns(true); 

     //Act 
     mock.Object.PerformAction(s); 

     //Assert 
     mock.Verify(x => x.Start()); 
     mock.Verify(x => x.Stop()); 
     mock.Verify(x => x.Continue()); 
    } 
+0

ために仕事をする私は、検証機能のために知りませんでした。そのためのおかげで入力。しかし、私の設定はライブラリプロジェクトではうまくいき、サービスプロジェクトではうまくいきませんから、私の質問には答えられません。 – Arthis

関連する問題