Я имею 2 вопросы тестирования потребителей MassTransit:MassTransit потребитель трудно проверить
- Синхронизировать выпуск
- MessageData
Первый таков:
var testConsumer = TestFactory.ForConsumer<ImageUploadConsumer>().New(
test =>
{
test.UseConsumerFactory(new InstanceConsumerFactory<ImageUploadConsumer>(ImageConsumer));
test.Publish(message, (scenario, context) =>
{
});
});
testConsumer.Execute(); //Is non blocking
следующая строка (ниже) терпит неудачу, поскольку эта строка:
moqFileMetaRepo.Verify(_ => _.Add(It.IsAny<IFileMeta>()),Times.Once);
выполняется 9,9/10, прежде чем ... эта линия никогда не делали:
public async Task Consume(ConsumeContext<ImageUploadWithThumb> context)
Мой фикс было сделать
moqFileMetaRepo
.Setup(repo => repo.Add(It.IsAny<IFileMeta>()))
.Callback(() => { AutoEvent.Set(); });
И назвать следующие до утверждают:
AutoEvent.WaitOne(TimeSpan.FromSeconds(10));
Это действительно много работы. И делает TDD или тестирование в целом хлопот, который, как я боюсь, только со временем будет проигнорирован.
MessageData выпуск - другой. Вот полезная нагрузка я посылаю через
message = new ImageUploadWithThumb()
{
Id = Guid.NewGuid(),
FileName = "Test.jpg",
User = "Me",
Extension = "jpg",
OriginalImage = new ConstantMessageData<byte[]>(new Uri("https://g00gle.com"), new byte[] { 1, 2, 3 })
};
Я ожидал получить byte[] { 1, 2, 3 }
на другом конце, без необходимости прибегать к созданию фактического настойчивости.
На стороне отправителе MessageData.Value устраняющей ок. Потребитель полностью бомбит. Работает в prod хотя = _ =, где не должно быть тестирования.
Я действительно просто хочу насмехаться, и UnitTest мой потребитель не должен бороться с каркасом - желательно менее чем за 5 минут или около того. Есть ли выход, придерживаясь MT3?