2017-08-27 24 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がnullの場合、このオブジェクトにどのように注入できますか?

答えて

1

プロダクションコードでコンテナを使用し、コンストラクタパラメータを挿入する可能性があるので、nullです。 MassTransitにはコンテナを使用していないため、注射は組み込まれていません。

あなたはそれを動作させるために、消費者の工場出荷時のオーバーロードを使用することができます。

_harness = new InMemoryTestHarness(); 
var filePolicy = new FilePolicyEvaluationConsumer(); 
_consumer = _harness.Consumer(
    () => new FilePolicyEvaluationConsumer(filePolicy)); 
関連する問題