yyds干货盘点:使用bUnit进行单元测试

发表于:2022-5-23 09:15

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:MyIO    来源:51CTO博客

  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");

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
价值398元的测试课程免费赠送,填问卷领取吧!

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2022
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号