【问题标题】:MassTransit how to set timetout on unit test?MassTransit 如何在单元测试中设置超时?
【发布时间】:2019-03-08 17:23:59
【问题描述】:

我正在使用 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();

        }
    }
}

有谁知道是否可以调整超时以使测试在几秒钟后失败?

【问题讨论】:

    标签: unit-testing xunit masstransit


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2012-03-26
      相关资源
      最近更新 更多