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应用,即可进行组件测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

*p++,(*p)++,*++p,++*p有什么不同

例如int a[5]{1,2,3,4,5}; int *p a;*p 先取指针p指向的值&#xff08;数组第一个元素1&#xff09;&#xff0c;再将指针p自增1&#xff1b;cout << *p; // 结果为 1cout <<(*p); // 1(*p) 先去指针p指向的值&#xff08;数组第一个元素1&#xff09;&#xff…

掌握这个姿势,女友不再叨叨叨

1 请收下我的膝盖2 正确姿势3 前世五百次的回眸 才换来今生的一次神同步4 论引体向上&#xff0c;你是不如我的5 教科书式的傲娇6 只有我最摇摆7 这是什么原理&#xff1f;你点的每个赞&#xff0c;我都认真当成了喜欢

ubuntu安装matlab2009,Ubuntu中安装Matlab2010a

Ubuntu中安装Matlab2010a一&#xff0e;前言&#xff1a;相信大家对于Matlab应该很熟悉吧&#xff0c;我就不多做介绍了。对于如何在Ubuntu中安装Matlab很多人都不懂&#xff0c;大家都是新手&#xff0c;可以理解。我自己本身就是一个菜鸟&#xff0c;所以决定写这篇文章&…

数据结构笔记--栈的总结及java数组实现简单栈结构

杂谈"栈"结构:   栈(Stack)是一种插入删除操作都只能在一个位置上进表,这个位置位于表的末端,叫做栈顶(Top). 对栈的基本操作有push和pop,表示进栈和出栈.也就相当于插入和删除操作. 栈结构又叫做LIFO(后进先出)表.归根结底是一个表结构,因此任何能够实现表结构的方…

45岁,一个平凡大叔的异地打工生活

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#xff0c;首发于 【掘金】&#x1f4e2;作者格言&#xff1a;生活在于…

C之结构体

 C语言中数组允许定义类型的变量,可容纳相同类型的多个数据项,但结构体在C语言编程中,它允许定义不同种类的数据项可供其他用户定义的数据类型。 结构是用来代表一个记录,假设要跟踪图书馆的书籍。可能要跟踪有关每本书以下属性: Title - 标题 Author - 作者 Subject…

用高等数学“铲雪”!这个200多年前的证明太厉害了,有城市用它省了2000多万..........

全世界只有3.14 % 的人关注了爆炸吧知识用高等数学清扫脚下路前几天&#xff0c;北京下了2021年的第一场雪。这让生活在广州的超模君羡慕不已&#xff0c;原本打算春节前去哈尔滨看个冰雕&#xff0c;结果由于各种原因一直都没成行。一个月前被关进小黑屋的设计师妹子刚好来自哈…

matlab排版形式是什么样子,工作型PPT,图文排版的4种常见样式

原标题&#xff1a;工作型PPT&#xff0c;图文排版的4种常见样式图片是PPT中最好用的一种元素&#xff0c;正所谓“一图抵过千言”。但要想让图片真正地发挥价值&#xff0c;图文排版的好坏非常关键。本期将聊聊4种图文排版的处理方法。这些方法也是我们日常工作中的PPT图文排版…

申请格式

格式与范文分析&#xff1a;  &#xff08;1&#xff09;标题  有两种写法&#xff0c;一是直接写“申请书”&#xff0c;另一是在“申请书”前加上内容&#xff0c;如“入党申请书”、“调换工作申请书”等&#xff0c;一般采用第二种。 申请书 &#xff08;2&#xff09;…

基于事件驱动架构构建微服务第15部分:SPA前端

原文链接 https://logcorner.com/building-micro-services-through-event-driven-architecture-part15-spa-front-end/在本教程中&#xff0c;我将展示如何使用angular构建SPA前端来发送命令和请求查询。SPA前端使用commandAPI发送命令&#xff08;创建、更新或删除语音&#x…

BBC又一神作,豆瓣9.8分,美轮美奂的大自然不仅仅属于人类

总有那么一些人&#xff0c;满怀着对世界的好奇&#xff0c;不远万里不畏艰难去穿越世界上每一个角落&#xff0c;为我们呈现出仅凭我们自己绝无可能看到的世间真实与美好。今天给大家推荐一部BBC出品的一部纪录片&#xff0c;纪录片爱好者肯定听过&#xff1a;BBC出品&#xf…

thinkphp 3.2 unionall

$where[enterprise_id] $enterpriseId; //企业名称不为空 if(!empty($enterpriseName)){$where[enterprise_name] array(like,"%$enterpriseName%");} $table2 array(enterprise_data.yunkh_enterprise_rel_enterprise>ed_ere,enterprise_data.yunkh_enterpris…

php用switch编写车费的输出,PHP Switch语句在实际代码中的应用

PHP Switch语句在实际代码中的应用PHP语言是一个功能强大的嵌入式HTML语言&#xff0c;下面我们将会为大家介绍其中的PHP Switch语句。如果您希望有选择地执行若干代码块之一&#xff0c;请使用PHP Switch语句。PHP脚本编写在网站开发中的作用解析PHP分页类的具体使用方法PHP跳…

C++相关的复习

h头文件,主要是函数、结构声明,常量定义等 .c,源文件,函数定义 .exe,可执行文件 .dll,动态链接库 .lib,静态链接库 .dsp,.dsw都是工程文件, 。cpp是C++的源文件 源文件一般为 .c .h文件 动态库文件 .so 静态库文件 .a 第 1 章 面向对象分析 1.1 结构化…

如何定义一个 Listint,string 这样的 List ?

咨询区 Benny Ae我在想为什么 C# 中没有内置带两列的 List 结构&#xff0c;如&#xff1a;List<int,string> mylist new List<int,string>();回答区 newfurniturey虽然没有内置&#xff0c;但还是有其他解决方案的&#xff0c;大体上有四种。使用 Tuple<int, s…

局部内部类

内部类不仅可以在类中进行定义&#xff0c;也可以在类的局部位置定义&#xff0c;如在类的方法或任意的作用域中均可以定义内部类。 interface Outinterface2 { } class OuterClass3{ public Outinterface2 doit(final String x) { //doit()方法参数为final类型 //在doit方…

想追身边的女孩?哥们我只能帮到你这份上了

1 接下来&#xff0c;就靠你自己了……2 不是女神就别想了3 你再来&#xff0c;我可撕票喽4 总有刁民想害朕。。5 每次我想偷偷溜出去玩&#xff0c;我妈就6 看看谁在偷懒你点的每个赞&#xff0c;我都认真当成了喜欢

C++中引用概念

前段时间在学习C&#xff0c;学习到了引用的概念&#xff0c;当时也查了好多的资料&#xff0c;网上也有很多关于引用的帖子&#xff0c;多是引用和指针的关系&#xff0c;谭浩强C中对引用的介绍也不是很多&#xff0c;今天把它们整理出来&#xff0c;相信也会对大家有所帮助&a…

php 版本排序,四种常见排序算法--PHP版本

1、冒泡排序法/*** 冒泡排序* des 对一组数据&#xff0c;比较相邻数据的大小&#xff0c;将值小数据在前面&#xff0c;值大的数据放在后面。*/$array [2,5,1,3,7,4];$result bubble_sort($array);print_r($result);function bubble_sort($array){$len count($array);for (…