MassTransit как установить timetout в модульном тестировании?

#unit-testing #xunit #masstransit

#модульное тестирование #xunit #массовый переход

Вопрос:

Я использую MassTransit для обмена сообщениями между двумя микросервисами, и у меня есть потребитель, который публикует событие, когда он получает командное сообщение.

При добавлении модульного теста для этого обмена сообщениями я заметил, что когда событие не публикуется, для завершения теста требуется около 30 секунд, что, как я полагаю, является таймаутом по умолчанию. Вот модульный тест xUnit, который воспроизводит проблему.

 using System;
using Xunit;
using MassTransit;
using MassTransit.Testing;
using System.Linq;
using SomeProject.MassTransitInterface;

namespace SomeProject.MassTransitInterface.Tests
{

    public class CommandTests
    {

        [Fact]
        public void Test1 ()
        {
            var harness = new InMemoryTestHarness();

            var consumer = harness.Consumer<SomeCommandConsumer>();

            harness.Start().Wait();
            var command = new SomeCommand();
            harness.InputQueueSendEndpoint.Send(command);

            Assert.True( harness.Sent.Select<SomeCommand>().Any() );

            harness.Stop().Wait();

        }
    }
}
  

Кто-нибудь знает, возможно ли настроить время ожидания так, чтобы тест мог завершиться неудачей через пару секунд?

Ответ №1:

Вы можете установить TestTimeout свойство в жгуте, которое используется всеми созданными тестовыми компонентами.

 /// <summary>
/// Timeout for the test, used for any delay timers
/// </summary>
public TimeSpan TestTimeout { get; set; }
  

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

https://github.com/MassTransit/MassTransit/blob/develop/src/MassTransit/Testing/AsyncTestHarness.cs#L30