首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在单元测试中将有效负载添加到请求/响应时出现Masstransit问题,在单元测试中交替使用管道

在单元测试中将有效负载添加到请求/响应时出现Masstransit问题,在单元测试中交替使用管道
EN

Stack Overflow用户
提问于 2021-03-18 23:35:34
回答 1查看 144关注 0票数 0

我的请求/响应消费者有一些消费者过滤器,其中一个过滤器生成额外的数据作为消息有效负载,并将其附加到请求消息中。为了在单元测试中测试我的使用者,我想添加Payload。

Q1)是否可以将有效负载添加到请求消息Q2)或者,我可以创建一个模拟筛选器并将其设置为管道中的消费者筛选器吗?(设置有效负载)

这是我最新的尝试:

代码语言:javascript
复制
    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“中。但是模拟过滤器永远不会被调用?

EN

回答 1

Stack Overflow用户

发布于 2021-03-19 03:19:22

您可以使用InMemoryTestHarness上的OnConfigureInMemoryBus事件将筛选器添加到总线终结点。

类似于:

代码语言:javascript
复制
harness.OnConfigureInMemoryBus += configurator =>
{
    configurator.UseFilter(...);
}

要向请求添加筛选器,请使用:

代码语言:javascript
复制
using RequestHandle<TRequest> requestHandle = requestClient.Create(message, cancellationToken);

requestHandle.UseFilter(...);

return await requestHandle.GetResponse<TResponse>().ConfigureAwait(false);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66694245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档