MassTransit如何在单元测试中设置超时?

时间:2019-03-08 17:24:00

标签: unit-testing xunit masstransit

我正在使用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 个答案:

答案 0 :(得分:2)

您可以在线束上设置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