Если текущий метод испытывается инициируются с помощью какого-либо другого метода, чем входящее сообщение (в handler), как вы проверяете публикацию событий. Проблема с NServiceBus.Testing (насколько я понимаю) заключается в том, что она очень ориентирована на обработчики тестов, которые, в свою очередь, вызывают отправку/публикацию сообщений/событий.
фон:
У нас есть целый ряд унаследованных систем, и в настоящее время усилия, чтобы перейти к правильной реализации SOA, мы должны интегрироваться с некоторыми унаследованными заданий DB. Эти задания выполняют действия в БД каждые 15 минут, которые мы хотим подключить и публиковать события при возникновении определенных условий.
У нас есть служба Windows, которая работает в NsbHost, но не содержит обработчиков. Вместо этого мы используем Quartz для создания внутреннего задания cron, которое выполняется каждую минуту, опроса БД для записей, соответствующих указанному шаблону, и публикует событие перед обновлением БД, чтобы сказать, что мы обработали эту запись. Вот как мы интегрируем старые и новые системы.
Очевидно, что это не идеальная ситуация, но при условии, что мы находимся на этапе перехода в нашей реализации SOA так же хорошо, как и сейчас.
Детали и код:
Наш интерфейс события мы публикуем выглядит как этот
public interface IPremiumAdjustmentFinalised
{
string PolicyNumber { get; set; }
decimal Amount { get; set; }
DateTime FinalisedOn { get; set; }
}
Кодекса фактически опубликовать событие является
Bus.Publish<IPremiumAdjustmentFinalised>(e =>
{
e.Amount = AdjustmentAmount;
e.PolicyNumber = PolicyNumber;
e.FinalisedOn = LastModifiedOn;
});
Это все работает отлично и мы можем проверить, что вызов был выполнен с использованием MOQ таким образом:
eventPublisher.MethodToTest();
bus.Verify(x => x.Publish(It.IsAny<Action<IPremiumAdjustmentFinalised>>()), Times.Once);
где шина - это новый макет, вставленный в конструктор.
Но я хочу проверить значения внутри IPremiumAdjustmentFinalised. Я нахожу это очень трудным, я думаю, главным образом потому, что это интерфейс, а не конкретный класс.
Мы попытались использовать NServiceBus.Testing, чтобы попытаться проверить сгенерированное событие, но безрезультатно.
Кто-нибудь знает, как проверить значения в событии в данном сценарии?