2011-11-08 20 views
1

私はこれまで、yahoogroupについてこれまで尋ねましたが、残念なことに答えはありません。NServicebus Test.Handler ExpectSendが期待した結果を出さない

ExpectSendは、ユニットテストに追加されると、テストがこのメッセージに失敗:

Rhino.Mocks.Exceptions.ExpectationViolationException: IBus.Send(callback method: 
<>c__DisplayClass2`1.<ExpectSend>b__1); Expected #1, Actual #0 

これは、Bus.Sendメソッドが呼び出されないようです。しかし、それはです。 .ExpectSendの行が使用されていない場合、テストは成功しました。

[TestMethod()] 
    public void Should_Handle_Goedkeuring_Which_Results_In_VolledigGoedgekeurdeFactuur() 
    { 
     int inkoopFactuurId = 5; 

     Test.Initialize(); 

     var mock = new Mock<IProcesGoedkeuringDataService>(); 
     mock.Setup(x => x.IsFactuurVolledigGoedgekeurd(inkoopFactuurId)).Returns(true); 

     Test.Handler<GoedkeuringDoorGebruikerCommandHandler>() 
     .WithExternalDependencies(h => h.DataService = mock.Object) 
     .ExpectSend<FactuurVolledigGoedgekeurdCommand>(c => 
     c.InkoopFactuurId == inkoopFactuurId) 
     .OnMessage<GoedkeuringDoorGebruikerCommand>(m => 
     SetupMessage(m)); ; 
    } 

ハンドラ:この場合、IsFactuurVolledigGoedgekeurdメソッドはtrueを返します。

public class GoedkeuringDoorGebruikerCommandHandler : IHandleMessages<GoedkeuringDoorGebruikerCommand> 
{ 
    public IBus Bus { get; set; } 
    public IProcesGoedkeuringDataService DataService { get; set; } 

    public void Handle(GoedkeuringDoorGebruikerCommand message) 
    { 
     RegistreerGoedkeuring(message.InkoopFactuurId, message.GebruikerId); 

     bool volledigGoedgekeurd = IsFactuurVolledigGoedgekeurd(message.InkoopFactuurId); 
     if (volledigGoedgekeurd) 
     { 
      Bus.Send(new FactuurVolledigGoedgekeurdCommand(message.InkoopFactuurId)); 
     } 
    } 
} 

答えて

1

チェック(RequestResponse NServiceBusサンプルに基づいて)このコード:

[TestFixture] 
public class Tests 
{ 
    [Test] 
    public void TestHandler() 
    { 
     var assemblies = new[] 
         { 
          typeof(RequestDataMessageHandler).Assembly, 
          typeof(RequestDataMessage).Assembly 
         }; 

     Test.Initialize(assemblies); 

     var dataId = Guid.NewGuid(); 
     var str = "hello"; 
     WireEncryptedString secret = "secret"; 

     Test.Handler<RequestDataMessageHandler>() 
      .WithExternalDependencies(m => m.Repository = (new Mock<IRepository>()).Object) 
      .ExpectSend<RequestDataMessage>(m => m.DataId == dataId && m.String == str && m.SecretQuestion == secret) 
      .OnMessage<RequestDataMessage>(m => { m.DataId = dataId; m.String = str; m.SecretQuestion = secret; }); 
    } 

    [Test] 
    public void TestHandler2() 
    { 
     var assemblies = new[] 
         { 
          typeof(RequestDataMessageHandler).Assembly, 
          typeof(RequestDataMessage).Assembly 
         }; 

     Test.Initialize(assemblies); 

     var dataId = Guid.NewGuid(); 
     var str = "hello"; 
     WireEncryptedString secret = "secret"; 

     Test.Handler<RequestDataMessageHandler>() 
      .WithExternalDependencies(m => m.Repository = (new Mock<IRepository>()).Object) 
      .ExpectSend<RequestDataMessage>(Check) 
      .OnMessage<RequestDataMessage>(m => { m.DataId = dataId; m.String = str; m.SecretQuestion = secret; }); 
    } 

    private static bool Check(RequestDataMessage m) 
    { 
     var dataId = Guid.NewGuid(); 
     var str = "hello"; 
     WireEncryptedString secret = "secret"; 

     return m.DataId == dataId && m.String == str && m.SecretQuestion == secret; 
    } 

    [Test] 
    public void TestHandler3() 
    { 
     var assemblies = new[] 
         { 
          typeof(RequestDataMessageHandler).Assembly, 
          typeof(RequestDataMessage).Assembly 
         }; 

     Test.Initialize(assemblies); 

     var dataId = Guid.NewGuid(); 
     var str = "hello"; 
     WireEncryptedString secret = "secret"; 

     Test.Handler<RequestDataMessageHandler>() 
      .WithExternalDependencies(m => m.Repository = (new Mock<IRepository>()).Object) 
      .ExpectSend<RequestDataMessage>(m => m.DataId == dataId && m.String == str && m.SecretQuestion == secret) 
      .OnMessage<RequestDataMessage>(m => SetUp(m)); 
    } 

    private static void SetUp(RequestDataMessage m) 
    { 
     var dataId = Guid.NewGuid(); 
     var str = "hello"; 
     WireEncryptedString secret = "secret"; 

     m.DataId = dataId; 
     m.String = str; 
     m.SecretQuestion = secret; 
    } 

出力: 1.合格 2.失敗 3.失敗

(Rhino.Mocks.Exceptions。 ExpectationViolationException:IBus.Send(コールバックメソッド:<> c_DisplayClass2`1.b _1);期待される#1、実際の#0)

おそらくあなたのメソッドをExpectSend/OnMessageメソッドにアクションとして適用すると、RhinoMocksの期待を破ります。私は理由を知らないが、例外が現れたのはそれが理由だ。

関連する問題