MassTransit, как установить тайм-аут на юнит-тест? - PullRequest
0 голосов
/ 08 марта 2019

Я использую 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 Ответ

2 голосов
/ 09 марта 2019

Вы можете установить свойство 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

...