簡體   English   中英

如何對返回無效值的命令處理程序進行單元測試?

[英]How do I unit test a Command Handler that returns a void?

請參見下面的代碼:

public class CreatePersonHandler
        : IRequestHandler<CreatePersonCommand,Unit>
    {

 public async Task<Unit> Handle(CreatePersonCommand message, CancellationToken cancellationToken)
        {
            var person = _enquiryFactory.Create(message.Gender, message.Salary);
            var offers = getAvailableOffers(); 
            person.AssignOffers(offers);
            await _mediator.DispatchDomainEventsAsync(person);
            return Unit.Value;
        }
  }

注意:

1)該命令沒有任何狀態。
2)命令方法沒有返回值。

我在這里已經閱讀了一些類似的問題,例如:一個單元測試無效方法? 返回空值的CQRS命令處理程序是否被歸類為信息性的,不應進行單元測試?

從根本上說,測試返回一個void的“命令處理程序”與測試返回一個void的方法沒有什么不同-void返回清楚地表明該方法因其副作用而被調用,因此您要檢查這些副作用。

根據被測對象的性質,使用測試double而不是實時協作者來確定是否發生了正確的事情可能是有意義的。

var person = _enquiryFactory.Create(message.Gender, message.Salary);
var offers = getAvailableOffers(); 
person.AssignOffers(offers);
await _mediator.DispatchDomainEventsAsync(person);
return Unit.Value;

在此示例中要注意的一件事是,不僅您的處理程序中沒有狀態 ,而且也沒有邏輯 -這里的任何分支都封裝在協作者中。

假設各個部分組合在一起,那么處理程序的責任就不是很多可能失敗的事情。 因此,我不會阻止這樣的請求請求,因為處理程序沒有“單元測試”。

您能否闡明您的意思是:“假設各部分組合在一起”。 一世

在“強類型”語言中,編譯器/解釋器將為我們完成大量檢查。 如果不滿意類型系統,那么在將方法加載到執行環境之前,我們將收到一條錯誤消息。

我看到您正在使用.DispatchDomainEventsAsync()添加/引發新事件。 您可以返回這些事件並編寫一個簡單的單元測試來計算這些事件的數量或結構,而不是什么也不返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM