gpt4 book ai didi

c# - 测试 MassTransit 订阅者

转载 作者:行者123 更新时间:2023-11-30 12:56:56 24 4
gpt4 key购买 nike

我需要测试使用 MassTransit 的订阅者。

下面是一个示例代码:

using System;
using MassTransit;

public class AnimalSubscriber : Consumes<Animal>.Context
{
public void Consume(IConsumeContext<Animal> message)
{
//.. my code here..
}
}

现在我不知道如何测试订阅者。如果有人可以让我知道一些细节;那将非常有帮助!

到目前为止,我愚蠢地想到创建一个 AnimalSubscriber 对象并调用 Consume 方法。

[TestFixture]
public class Test
{
[Test]
public void SearchAnimals()
{
AnimalSubscriber subscriber = new AnimalSubscriber();
Animal request = new Animal
{
Id : 1,
Name : "Tiger"
};

//Not sure how to mock this IReceiveContext.
IReceiveContext context = new ReceiveContext();

IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request);

subscriber.Consume(null);
}
}

但是我被下面的代码行卡住了:

IConsumeContext<Animal> message =new ConsumeContext<Animal>(context, request); //<- Not sure how to mock this IReceiveContext.

Error : The type 'MassTransit.Context.ReceiveContext' has no constructors defined

需要一些建议!

最佳答案

如果您正在使用 MassTransit v2(基于您在上面指定的接口(interface)确实是这种情况),您可以使用 Testing 命名空间来构建您的测试。

v2 存储库分支中提供了一个示例单元测试:https://github.com/MassTransit/MassTransit/blob/v2-master/src/MassTransit.Tests/Testing/ConsumerTest_Specs.cs#L19

例如,可以设置一个测试装置来构建您的消费者并向其发送消息:

_test = TestFactory.ForConsumer<AnimalSubscriber>()
.InSingleBusScenario()
.New(x =>
{
x.ConstructUsing(() => new AnimalSubscriber());

x.Send(new Animal(), (scenario, context) => context.SendResponseTo(scenario.Bus));
});

_test.Execute();

然后您可以围绕该测试构建断言,例如:

_test.Sent.Any<A>().ShouldBeTrue();

请注意,这仅适用于 v2,Testing 命名空间,虽然存在于 v3 中,但还不能完全正常工作(它无法在迁移到 async 后幸存下来,我还没有采用是时候让它完全正常工作了)。

关于c# - 测试 MassTransit 订阅者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37251728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com