2013-06-04 2 views
2

У меня есть обработчик, которому необходимо отправить локальное сообщение для каждого экземпляра объекта, полученного из репозитория. Обратный вызов, переданный в NServiceBus.Testing.Handler<>::ExpectSendLocal(), вызывает только при первом вызове IBus::SendLocal() в моем обработчике. Я попытался связать второй Handler<>::ExpectSendLocal(), но его обратный вызов вызывается только на первом. Вот пример обработчик:Как проверить несколько действий в обработчике NServiceBus

public FooHandler : IHandleMessages<IFoo> 
{ 
    public void Handle(IFoo message) 
    { 
     var bars = new [] {new Bar {Zap = "Zap1"}, new Bar {Zap = "Zap2"}}; 
     foreach (var bar in bars) 
     { 
      this.Bus().SendLocal<IBarProcessed>(barMsg => { 
      barMsg.Zap = bar.Zap; 
      }); 
      bar.IsProcessed = true; 
     } 
    } 
} 

Вот тестовый пример блок, который увеличивает счетчик для IBus::SendLocal() ожидания:

public void When_IFoo_message_received() 
{ 
    int actualCount = 0; 
    new NServiceBus.Testing.Handler<FooHandler>() 
      .ExpectSendLocal<IBarProcessed>(completed => actualCount++) 
      .OnMessage<IFoo>(); 
    Assert.AreEqual(2, actualCount); // fails because actualCount is one 
} 

Вот тестовый пример блока, цепи NServiceBus.Testing.Handler<FooHandler>.ExpectSendLocal() и проверяет 2 различных значений от 2-х сообщений:

public void When_IFoo_message_received() 
{ 
    new NServiceBus.Testing.Handler<FooHandler>() 
      .ExpectSendLocal<IBarProcessed>(completed => { 
       Assert.AreEqual("Zap1", completed.Zap); 
      }) 
      .ExpectSendLocal<IBarProcessed>(completed => { 
       Assert.AreEqual("Zap2", completed.Zap); // fails because it's the value from the first one e.g. "Zap1" 
      }) 
      .OnMessage<IFoo>(); 
} 

ответ

1

Это похоже на ошибку, не могли бы вы подняли вопрос о github для этого?

+0

Обязательно. Благодарю. – gabe

Смежные вопросы