如何解决Masstransit 在单元测试中将有效负载添加到请求/响应中的问题,或者在单元测试中使用管道
目前我有一个问题,我想在 .NET 中为 Masstransit 编写单元测试。我的请求/响应消费者有一些消费者过滤器,其中一个过滤器生成额外的数据作为消息有效负载并将其附加到请求消息中。为了在单元测试中测试我的使用者,我想添加有效负载。
Q1) 是否可以将有效负载添加到请求消息中 Q2) 或者,我可以制作一个模拟过滤器并将其设置为管道中的消费者过滤器吗? (设置有效载荷)
这是我最近的尝试:
public class ContactCommandConsumerTest
{
[Fact]
public async Task CreateContactOnUserRequestConsumer_RequestConsumer_IsAttached()
{
var harness = new InMemoryTestHarness { TestTimeout = TimeSpan.FromSeconds(5) };
[...]
var consumer = harness.Consumer<CreateContactOnUserRequestCommandConsumer>(() => new CreateContactOnUserRequestCommandConsumer(loggerConsumer,mapper,kontakteintragRep,machineTime));
var pipe = Pipe.New<PipeContext>(x => x.UseFilter(new MockFilter<PipeContext>()));
// harness.Consumer<CreateContactOnUserRequestCommandConsumer>();
await harness.Start();
try
{
harness.Bus.ConnectConsumePipe<CreateContactOnUserRequestCommandConsumer>(pipe);
var requestClient = await harness.ConnectRequestClient<CreateContactOnUserRequestCommand>();
var response = await requestClient.GetResponse<AcceptedResponse,FaultedResponse>(new
{
EntityInfo = "Vb48cc135-4593-4b96-bb29-2cf136b3d1ee",});
Assert.True(consumer.Consumed.Select<CreateContactOnUserRequestCommand>().Any());
Assert.True(harness.Sent.Select<FaultedResponse>().Any());
}
finally
{
await harness.Stop();
}
}
}
internal class MockFilter<T> : IFilter<T> where T: class,PipeContext
{
public void Probe(ProbeContext context)
{
context.CreateFilterScope("mock");
}
public async Task Send(T context,IPipe<T> next)
{
context.GetOrAddPayload(() => new ContextUserPayload() { ContextUser = new Guid("dc6e091f-669e-45b3-9dd6-a36316f70527") });
await next.Send(context);
}
}
我尝试构建一个管道并将其添加到“harness.bus.ConnectConsumerPipe”。但是模拟过滤器永远不会被调用???
解决方法
您使用 OnConfigureInMemoryBus
上的 InMemoryTestHarness
事件将过滤器添加到总线端点。
类似于:
harness.OnConfigureInMemoryBus += configurator =>
{
configurator.UseFilter(...);
}
要向请求添加过滤器,请使用:
using RequestHandle<TRequest> requestHandle = requestClient.Create(message,cancellationToken);
requestHandle.UseFilter(...);
return await requestHandle.GetResponse<TResponse>().ConfigureAwait(false);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。