軟體廚房開始推出小菜一碟系列,這系列的篇幅不長,但是裡面都會有一言以蔽之的重點,像這篇就是在講我們自訂了一個 ModelBinder,它要怎麼做單元測試?
我們拿[料理佳餚] ASP.NET MVC 自訂 ModelBinder 將宣告為抽象型別的參數反序列化這篇的例子來看一下。
Arrange
指定的受測對象就是我們的 CustomerModelBinder
的 BindModel
方法,在 BindModel 方法裡面需要兩個參數 ControllerContext
、ModelBindingContext
,因此我們要打造出來給 BindModel 方法使用。
ControllerContext 我們用 NSubstitute mock 出來,而 ModelBindingContext 我們直接 new 出來即可,然後裡面指定 ModelMetadata。
接下來是受測內容 ControllerContext.HttpContext.Request.InputStream
,裡面實際的內容是 Customer 序列化後的資料。
最後把 CustomerModelBinder new 起來,這樣受測對象及受測內容就準備完成了。
Act
執行指定的受測對象 CustomerModelBinder.BindModel 方法,把回傳結果指定給 actual 變數。
Assert
驗證受測對象回傳的結果是否如我們預期的那樣,我用 FluentAssertions 來操作 Assert。
< Source Code >