#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; }
Вы должны установить его заранее, как в вашем тестовом конструкторе, чтобы любой токен или установленные таймеры использовали значение.