unit-testing - MassTransit 服务总线配置和单元测试

标签 unit-testing dependency-injection masstransit

对于 MassTransit,在设置新服务总线时必须声明端点/类型;但是,我正在尝试删除该依赖项,以便在对消费者进行测试时,我可以利用环回端点,但一旦投入生产,它将使用实际的 msmq 端点。

下面是一个新服务总线的示例设置:

public class ConsumerService
{
    IServiceBus _bus;

    public void Start()
    {
        // Initalize Service Bus
        _bus = ServiceBusFactory.New(x =>
        {
            //x.UseMsmq();
            x.ReceiveFrom("loopback://localhost/MyQueue");
            x.SetConcurrentConsumerLimit(1);
        });
        _bus.SubscribeConsumer(() => new MyConsumer());
    }

    public void Stop()
    {
        _bus.Dispose();
    }
}

最佳答案

使用构造函数注入(inject):

public class ConsumerService
{
    private readonly IBusInitializer initializer;

    public ConsumerService(IBusInitializer initializer)
    {
        this.initializer = initializer;
    }

    IServiceBus _bus;

    public void Start()
    {
        // Initalize Service Bus
        _bus = ServiceBusFactory.New(x =>
        {
            this.initializer.initialize(x);
            x.SetConcurrentConsumerLimit(1);
        });
        _bus.SubscribeConsumer(() => new MyConsumer());
    }

    public void Stop()
    {
        _bus.Dispose();
    }
}

其中 IInitializer 是一个正确定义的接口(interface),实现可以是:

public class LoopbackInitializer : IBusInitializer
{
    public void Initialize(WhateverXIs x)
    {
        x.ReceiveFrom("loopback://localhost/MyQueue");
    }
}

public class MsmqInitializer : IBusInitializer
{
    public void Initialize(WhateverXIs x)
    {
        x.UseMsmq();
    }
}

在您的测试或 Composition Root 中注入(inject)所需的实现.

关于unit-testing - MassTransit 服务总线配置和单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32383124/

相关文章:

c# - MassTransit 消息输入错误

MassTransit StateMachine 通过 Int 进行关联

c# - 如何向特定订阅者重新发送消息?

unit-testing - 我应该将 Eclipse 插件片段的测试代码放在哪里?

javascript - 如何创建引用另一个类的 QUnit 测试?

angular - 在 Angular 6 中,我在组件中收到错误 "NullInjectorError: No provider for Store"

spring - Spring 3 注入(inject) applicationContext 的最佳实践

unit-testing - 单元测试 - 使用真实值还是模拟?

unit-testing - 在dart中进行单元测试时,如何一致地设置环境?

java - Spring依赖注入(inject)泛型类型的用法