Hello Blazor:(15)使用bUnit进行单元测试
bUnit介紹
bUnit是Blazor組件測試庫。其目標(biāo)是使編寫全面、穩(wěn)定的單位測試變得容易。有了bUnit,你可以:
使用C#或Razor語法設(shè)置和定義測試下的組件
使用語義HTML比較器驗證結(jié)果
與組件以及觸發(fā)事件處理程序進(jìn)行交互和檢查
傳遞參數(shù)、級聯(lián)值并將服務(wù)注入測試組件
模擬IJSRuntime,認(rèn)證和授權(quán)等
bUnit是建立在現(xiàn)有單元測試框架(如xUnit、NUnit和MSTest)基礎(chǔ)上的,這些框架以與任何正常單元測試相同的方式運行Blazor組件測試。與通常需要幾秒鐘才能運行的基于瀏覽器的UI測試相比,bUnit在毫秒內(nèi)運行測試。
基本使用
創(chuàng)建一個Blazor WebAssembly 項目,然后添加一個xUnit測試項目。
在測試項目中引用Nuget包bUnit。
首先,讓測試類繼承TestContext,然后編寫測試用例:
public?class?UnitTest1?:?TestContext {[Fact]public?void?Test1(){var?cut?=?RenderComponent<Counter>();cut.Find("button").Click();cut.Find("p").MarkupMatches("<p>Current?count:?1</p>");} }此測試用例通過RenderComponent方法呈現(xiàn)Counter組件,然后找到組件呈現(xiàn)的按鈕并執(zhí)行按鈕的Click方法,最后,驗證p元素是否與預(yù)期標(biāo)記匹配。
模擬IJSRuntime
Blazor組件通常需要調(diào)用JavaScript,而在單元測試中,我們并不會運行JavaScript,因此bUnit需要模擬IJSRuntime。
假設(shè)組件代碼如下:
@inject?IJSRuntime?JSRuntime <button?@onclick=ButtonClicked>Click</button> @code {private?async?Task?ButtonClicked(){await?JSRuntime.InvokeVoidAsync("alert",?"My?IO");} }然后編寫測試用例:
[Fact] public?void?Test1() {var?cut?=?RenderComponent<WebApplication20.Pages.Index>();JSInterop.SetupVoid("alert",?"My?IO");cut.Find("button").Click(); }和普通測試用例唯一的不同,我們驗證了IJSRuntime會調(diào)用alert方法并傳入指定參數(shù):
JSInterop.SetupVoid("alert",?"My?IO");結(jié)論
使用bUnit,我們無需啟動Blazor應(yīng)用,即可進(jìn)行組件測試。
總結(jié)
以上是生活随笔為你收集整理的Hello Blazor:(15)使用bUnit进行单元测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# WPF MVVM开发框架Calib
- 下一篇: 45岁,一个平凡大叔的异地打工生活