简体   繁体   English

测试大众运输消费者

[英]Testing masstransit consumer

I am trying to test masstransit consumer my consumer look like this: 我正在尝试测试大众运输消费者,我的消费者如下所示:

public class FilePolicyEvaluationConsumer : IFilePolicyEvaluationConsumer
{
    public readonly IFilePolicyEvaluationCore _filePolicyEvaluationCore;
    public readonly IRepositoryClient _repositoryClient;
    public readonly IFPRepository _fPRepository;

    public FilePolicyEvaluationConsumer()
    {

    }

    public FilePolicyEvaluationConsumer(IFilePolicyEvaluationCore filePolicyEvaluationCore, IRepositoryClient repositoryClient, IFPRepository fPRepository)
    {
        _filePolicyEvaluationCore = filePolicyEvaluationCore;
        _repositoryClient = repositoryClient;
        _fPRepository = fPRepository;
    }

    public  Task Consume(ConsumeContext<InvokePolicyOnFileMessage> context)
    {
        return Task.Run( async () => {
            Guid fileId = context.Message.FileId;
            FileMetadata fileMetaData = await  _repositoryClient.GetFileMetadata(fileId);
            _filePolicyEvaluationCore.Run(fileMetaData, context.Message.CorrelationId);
        });

    }

but when i configure the test like this 但是当我像这样配置测试时

_harness = new InMemoryTestHarness();
        FilePolicyEvaluationConsumer filePolicy = new FilePolicyEvaluationConsumer(); 
        _consumer = _harness.Consumer<FilePolicyEvaluationConsumer>();


        await _harness.Start();
        await _harness.InputQueueSendEndpoint.Send(message1);

when i enter in the test to consumer all objects _filePolicyEvaluationCore,_repositoryClient,_fPRepository in the consumer are null, how can i inject to this objects? 当我进入测试以使用消费者时,消费者中的所有对象_filePolicyEvaluationCore,_repositoryClient,_fPRepository为空,我如何注入该对象?

It is null because you probably use a container in your production code and inject the constructor parameter. 它为null因为您可能在生产代码中使用了一个容器并注入了构造函数参数。 MassTransit has no injection built-in since it does not use any containers. MassTransit不内置任何注入功能,因为它不使用任何容器。

You can use the consumer factory overload to make it work: 您可以使用使用者工厂重载使其工作:

_harness = new InMemoryTestHarness();
var filePolicy = new FilePolicyEvaluationConsumer(); 
_consumer = _harness.Consumer(
    () => new FilePolicyEvaluationConsumer(filePolicy));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM