Hello Blazor:(15)使用bUnit进行单元测试
bUnit介绍
bUnit是Blazor组件测试库。其目标是使编写全面、稳定的单位测试变得容易。有了bUnit,你可以:
使用C#或Razor语法设置和定义测试下的组件
使用语义HTML比较器验证结果
与组件以及触发事件处理程序进行交互和检查
传递参数、级联值并将服务注入测试组件
模拟IJSRuntime,认证和授权等
bUnit是建立在现有单元测试框架(如xUnit、NUnit和MSTest)基础上的,这些框架以与任何正常单元测试相同的方式运行Blazor组件测试。与通常需要几秒钟才能运行的基于浏览器的UI测试相比,bUnit在毫秒内运行测试。
基本使用
创建一个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方法呈现Counter组件,然后找到组件呈现的按钮并执行按钮的Click方法,最后,验证p元素是否与预期标记匹配。
模拟IJSRuntime
Blazor组件通常需要调用JavaScript,而在单元测试中,我们并不会运行JavaScript,因此bUnit需要模拟IJSRuntime。
假设组件代码如下:
@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会调用alert方法并传入指定参数:
JSInterop.SetupVoid("alert", "My IO");
结论
使用bUnit,我们无需启动Blazor应用,即可进行组件测试。
Hello Blazor:(15)使用bUnit进行单元测试相关推荐
- 单元测试(Android)_JUnit
1 1.首先在AndroidManifest.xml中加入下面红色的代码: 2 <?xml version="1.0" encoding="utf-8"? ...
- python面试-马哥教育官网-专业Linux培训班,Python培训机构
今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷. 1.Python中pass语句的作用是 ...
- python编程入门与案例详解pdf-Flutter技术入门与实战 PDF 清晰版
给大家带来的一篇关于Flutter相关的电子书资源,介绍了关于Flutter入门.Flutter实战.Flutter技术方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小162.5 MB, ...
- 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...
- python面试题_17道Python面试题,分享给你以防不测!
今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷. 1.Python中pass语句的作用是 ...
- Magicodes.IE 2.5.6.2发布
2.5.6.2 2021.10.13 支持自定义列字体颜色,具体见PR#342,感谢xiangxiren 修复日期格式化的问题,具体见PR#344,感谢ccccccmd 2.5.6.1 2021.10 ...
- Magicodes.IE 2.5.6.1发布
2.5.6.1 2021.10.06 修复 #337,bool?类型导出的映射问题 2.5.6.0 2021.10.05 合并Magicodes.EPPlus到Magicodes.IE,修复所有单元测 ...
- Magicodes.IE 2.5.5.3发布
2.5.5.3 2021.08.27 修复Append方式导出多个sheet时,发生"Tablename is not unique"错误,具体见#299. 2.5.5.2 202 ...
- Magicodes.IE 2.5.4.2发布
Magicode.IE,导入导出通用库,支持Dto导入导出.模板导出.花式导出以及动态导出,支持Excel.Csv.Word.Pdf和Html. Github:https://github.com/d ...
最新文章
- 2021研究生报告:博士每年招生超10万人,女生读研占比达55.1%
- 使用Sentinel配置Redis 3.x主从高可用服务
- 机器学习笔记:高斯判别分析
- 正则表达式 perl
- JZOJ 5107. 【GDSOI2017】 中学生数据结构题
- C++面向接口编程和C++多态
- 为什么我们总是喜欢选择差不多的价格
- Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力
- sql server 快照_在SQL Server合并复制中应用快照时出现外键问题
- 剑指Offer之左旋字符串
- 微软原生 Notepad 融入 VS Code 才是出路?
- java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 解决
- 使用 freessl.cn 为自己的静态netlify站点添加 https
- hdu 3786 找出直系亲属 (DFS)
- [Rootkit] dll 隐藏 - VAD
- Githup上第三方控件的地址收藏
- SQL Server事务日志分析
- 学习Python全套代码【超详细】Python入门、核心语法、数据结构、Python进阶【致那个想学好Python的你】
- Android 使用ViewPager实现基本的翻页效果
- 100个囚犯的脱狱问题