ile bir komut ve olay tabanlı sistem nasıl test edilir Bir yürütme işlemi gerçekleştirildiğinde bir olayı tetikleyen bir etki alanı nesnesindeki bir işlemi başlatır bir komut işleyicisine sahibim. Bir olay işleyicisinin, ilgili komut gönderildiğinde olayı aldığını test etmek isterim (aşağıya bakınız, bazı kodlar kısırlık için atlanmıştır). Olay iletisi veri yolu üzerinde yayınlanmış olsa bile olay işleyicisi (MyEventConsumer.Consume) hiçbir zaman çağrılmaz (bu durumda geridönüş yolu). Herhangi bir fikir?Masstransit
//Test
[TestFixture]
public class TestSendCommandReceiveEvent
{
[Given]
public void installation_of_infrastructure_objects()
{
container.Register(Component.For<MyEventConsumer>().UsingFactoryMethod(() => new MyEventConsumer(_received)));
container.Register(
Component.For<IServiceBus>()
.UsingFactoryMethod(() => ServiceBusFactory.New(x => { x.ReceiveFrom("loopback://localhost/mt_client"); x.Subscribe(conf => conf.LoadFrom(container)); })));
}
[When]
public void sending_a_command()
{
var LocalBus = container.Resolve<IServiceBus>();
LocalBus.Publish(new DoSomething(_aggregateId));
}
[Then]
public void corresponding_event_should_be_received_by_consumer()
{
_received.WaitOne(5000).ShouldBeTrue();
}
}
public class MyEventConsumer : Consumes<SomethingDone>.All
{
private readonly ManualResetEvent _received;
public MyEventConsumer(ManualResetEvent received)
{
_received = received;
}
public void Consume(SomethingDone message)
{
_received.Set();
}
}
//Command handler
public class DoSomethingCommandHandler : Consumes<DoSomething>.All where T:class
{
public void Consume(DoSomething message)
{
var ar = Repository.GetById<SomeAR>(message.ArId);
ar.DoSomething();
Repository.Save(ar, Guid.NewGuid(), null);
}
}
//Domain object
public class SomeDomainObject : AggregateBase
{
public void DoSomething()
{
RaiseEvent(new SomethingDone(Id, 1));
}
}
üretimde bu çalışıyor mu ve sadece bir testte başarısız? Öyle görünüyor ki, koddan her şey yolunda görünüyor, ama sanırım kodda bazı hatalar var, yani bu şeylerin doğru bağlandığını varsayıyor. Ne yazdığın hakkında biraz daha ayrıntılı bir şekilde posta listesine katılmayı öneririm. https://groups.google.com/forum/#!forum/masstransit-discuss Tahmin etmem gerekirse, belki de konteynerle ilgili bir sorun. Sanırım hepsini çözdük ama bir aykırı olabilir. – Travis
Hmm, bir üretim konusu gibi görünüyor. Veriyolu yanlış yapılandırılmış olmalı. Bir göz atacağım. – Christian
Tamam, burada ne eksik olduğunu göremiyorum (MT/Kale ile kendi deneyim eksikliği hariç). Mail listesine geçiyorum. – Christian