У меня есть обработчик, которому необходимо отправить локальное сообщение для каждого экземпляра объекта, полученного из репозитория. Обратный вызов, переданный в 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>();
}
Обязательно. Благодарю. – gabe