2016-05-16 3 views
3

Мне нужно проверить моего абонента, который использует MassTransit.Тестирование MassTransit Subsciber

Ниже приведен пример кода:

using System; 
using MassTransit; 

public class AnimalSubscriber : Consumes<Animal>.Context 
{ 
    public void Consume(IConsumeContext<Animal> message) 
    { 
     //.. my code here.. 
    } 
} 

Прямо сейчас я не знаю, как проверить Абонента. Если кто-то может сообщить мне некоторые подробности; Это было бы очень полезно!

На данный момент, по-дурацки, я думал о создании объекта AnimalSubscriber и вызова метода Consume.

[TestFixture] 
public class Test 
{ 
    [Test] 
    public void SearchAnimals() 
    { 
     AnimalSubscriber subscriber = new AnimalSubscriber(); 
     Animal request = new Animal 
     { 
      Id : 1, 
      Name : "Tiger" 
     }; 

     //Not sure how to mock this IReceiveContext. 
     IReceiveContext context = new ReceiveContext(); 

     IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); 

     subscriber.Consume(null); 
    } 
} 

Но я застрял с ниже строки кода:

IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); //<- Not sure how to mock this IReceiveContext. 

Ошибка: Тип 'MassTransit.Context.ReceiveContext' имеет не Конструкторы не определен

Нужна какой-нибудь совет пожалуйста!

ответ

0

Если вы используете MassTransit v2 (который на основе указанных выше интерфейсов действительно имеет место), вы можете использовать пространство имен Testing для разработки своих тестов.

тест

Пример блок доступен в репозитории v2 филиала: https://github.com/MassTransit/MassTransit/blob/v2-master/src/MassTransit.Tests/Testing/ConsumerTest_Specs.cs#L19

В качестве примера, тестирование приспособление может быть установка для создания вашего потребителя и посылать ему сообщения:

_test = TestFactory.ForConsumer<AnimalSubscriber>() 
    .InSingleBusScenario() 
    .New(x => 
     { 
      x.ConstructUsing(() => new AnimalSubscriber()); 

      x.Send(new Animal(), (scenario, context) => context.SendResponseTo(scenario.Bus)); 
     }); 

_test.Execute(); 

Тогда вам можно строить утверждения вокруг этого испытания, такие как:

_test.Sent.Any<A>().ShouldBeTrue(); 

Обратите внимание, что это работает только с v2, в пространстве имен тестирования, в то время как в настоящее v3, сделать пока не работает (он не перестал двигаться до async, и я не нашел времени, чтобы он полностью работал).

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