MassTransit 如何在单元测试中设置超时?
MassTransit how to set timetout on unit test?
我使用 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();
}
}
}
有谁知道是否可以调整超时,以便测试在几秒钟后失败?
您可以在线束上设置TestTimeout
属性,所有创建的测试组件都会使用它。
/// <summary>
/// Timeout for the test, used for any delay timers
/// </summary>
public TimeSpan TestTimeout { get; set; }
您应该尽早设置它,就像在您的测试构造函数中一样,以便设置的任何令牌或计时器都使用该值。
我使用 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();
}
}
}
有谁知道是否可以调整超时,以便测试在几秒钟后失败?
您可以在线束上设置TestTimeout
属性,所有创建的测试组件都会使用它。
/// <summary>
/// Timeout for the test, used for any delay timers
/// </summary>
public TimeSpan TestTimeout { get; set; }
您应该尽早设置它,就像在您的测试构造函数中一样,以便设置的任何令牌或计时器都使用该值。