En versiones anteriores de MassTransit, cuando escribía pruebas unitarias, solía generar el estado inicial de una saga llamando al método InMemorySagaRepository.Add() :
private InMemorySagaRepository<TState> Repository { get; } protected async Task SeedSaga<TState>(TState seedState) where TState : class, SagaStateMachineInstance { await Repository.Add(new SagaInstance<TState>(seedState), default); }Este método agregaría una entrada para la saga en el estado deseado en el repositorio, que podría usarse como punto de partida para mis pruebas.
Ahora actualicé a la versión 7.2.1 de MassTransit y este método ya no está disponible.
¿Es posible generar datos en la versión actual de InMemorySagaRepository ? De no ser así, ¿qué enfoque podría adoptarse para lograr resultados similares?
Gracias.
Hubo una discusión sobre esto a fines del año pasado. En resumen, debe usar el arnés de prueba en memoria basado en contenedor.
var services = new ServiceCollection(); services.AddMassTransitInMemoryTestHarness(x => { x.AddSagaStateMachineTestHarness<MySagaStateMachine, MySagaState>(); x.AddSagaStateMachine<MySagaStateMachine, MySagaState>() .InMemoryRepository(); }); var provider = services.BuildServiceProvider();Obtenga e inicie el arnés de prueba (asegúrese de detenerlo finalmente ):
var harness = provider.GetRequiredService<InMemoryTestHarness>(); await harness.Start();Puede obtener el diccionario de saga y agregar su instancia de saga semilla:
var dictionary = provider.GetRequiredService<IndexedSagaDictionary<MySagaState>>(); dictionary.Add(new SagaInstance(new MySagaState { CorrelationId = ..., OtherProperty = ... }));La discusión vinculada también tiene algunos métodos de extensión útiles.