2016-03-31 4 views
0

Я имею 2 вопросы тестирования потребителей MassTransit:MassTransit потребитель трудно проверить

  1. Синхронизировать выпуск
  2. 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 } на другом конце, без необходимости прибегать к созданию фактического настойчивости.

Вместо: Got an error

На стороне отправителе MessageData.Value устраняющей ок. Потребитель полностью бомбит. Работает в prod хотя = _ =, где не должно быть тестирования.

Я действительно просто хочу насмехаться, и UnitTest мой потребитель не должен бороться с каркасом - желательно менее чем за 5 минут или около того. Есть ли выход, придерживаясь MT3?

ответ

1

Я предлагаю посмотреть на пакет MassTransit.TestFramework. Это требует NUnit, но вы всегда можете взять классы и перенести их в свою собственную тестовую среду.

Все тестеры MassTransit записываются с использованием приборов в этой структуре. Исходное пространство .Testing namespace находится в ужасном мире, но оно не сохранилось полностью, и я не уверен, что он действительно работает полностью. Это не было предназначено для асинхронной работы, поэтому было сложно переходить, не уничтожая его полностью.

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