2017-08-27 121 views
0

我想測試masstransit消費者 我的消費者是這樣的:測試masstransit消費者

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); 
     }); 

    } 

但是當我配置這樣

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


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

測試時,我在測試消費者進入消費者中的所有對象_filePolicyEvaluationCore,_repositoryClient,_fPRepository都爲空,我如何注入此對象?

回答

1

它是null,因爲您可能在您的生產代碼中使用容器並注入構造函數參數。 MassTransit沒有內置注入,因爲它不使用任何容器。

您可以使用消費者廠超負荷,使其工作:

_harness = new InMemoryTestHarness(); 
var filePolicy = new FilePolicyEvaluationConsumer(); 
_consumer = _harness.Consumer(
    () => new FilePolicyEvaluationConsumer(filePolicy)); 
相關問題