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进行单元测试相关推荐

  1. 单元测试(Android)_JUnit

    1 1.首先在AndroidManifest.xml中加入下面红色的代码: 2 <?xml version="1.0" encoding="utf-8"? ...

  2. python面试-马哥教育官网-专业Linux培训班,Python培训机构

    今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷. 1.Python中pass语句的作用是 ...

  3. python编程入门与案例详解pdf-Flutter技术入门与实战 PDF 清晰版

    给大家带来的一篇关于Flutter相关的电子书资源,介绍了关于Flutter入门.Flutter实战.Flutter技术方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小162.5 MB, ...

  4. 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  5. python面试题_17道Python面试题,分享给你以防不测!

    今天给大家分享的是Python面试题系列的第一篇文章,后续我也会陆续整理Python相关的问题给大家,无论是求职者还是新人都可以通过面试题来考察自己的能力缺陷. 1.Python中pass语句的作用是 ...

  6. 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 ...

  7. 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,修复所有单元测 ...

  8. 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 ...

  9. Magicodes.IE 2.5.4.2发布

    Magicode.IE,导入导出通用库,支持Dto导入导出.模板导出.花式导出以及动态导出,支持Excel.Csv.Word.Pdf和Html. Github:https://github.com/d ...

最新文章

  1. 2021研究生报告:博士每年招生超10万人,女生读研占比达55.1%
  2. 使用Sentinel配置Redis 3.x主从高可用服务
  3. 机器学习笔记:高斯判别分析
  4. 正则表达式 perl
  5. JZOJ 5107. 【GDSOI2017】 中学生数据结构题
  6. C++面向接口编程和C++多态
  7. 为什么我们总是喜欢选择差不多的价格
  8. Codeforces Round #636 (Div. 3) F. Restore the Permutation by Sorted Segments 思维 + 暴力
  9. sql server 快照_在SQL Server合并复制中应用快照时出现外键问题
  10. 剑指Offer之左旋字符串
  11. 微软原生 Notepad 融入 VS Code 才是出路?
  12. java.sql.SQLException: Io 异常: The Network Adapter could not establish the connection 解决
  13. 使用 freessl.cn 为自己的静态netlify站点添加 https
  14. hdu 3786 找出直系亲属 (DFS)
  15. [Rootkit] dll 隐藏 - VAD
  16. Githup上第三方控件的地址收藏
  17. SQL Server事务日志分析
  18. 学习Python全套代码【超详细】Python入门、核心语法、数据结构、Python进阶【致那个想学好Python的你】
  19. Android 使用ViewPager实现基本的翻页效果
  20. 100个囚犯的脱狱问题

热门文章

  1. Spring + hibernate + JPA 配置
  2. python线性回归算法简介_Python实现的简单线性回归算法实例分析
  3. 06 小数据池 is 和 = = 再谈编码
  4. 【东软实训】SQL多表链接
  5. Unity经典游戏教程之:雪人兄弟
  6. Yii 2 的安装 之 踩坑历程
  7. Memcached简介
  8. 使用python远程登录
  9. 开源项目导入eclipse的一般步骤[转]
  10. Android 横竖屏切换的处理 (转载)