当前位置: 首页 > news >正文

举例说明 .Net Core 单元测试中 xUnit 的 [Theory] 属性的用法

在这篇文章中,我们探讨了如何使用 xUnit 的 [Theory] 属性来运行参数化测试。通过示例展示了如何使用 [InlineData][MemberData][ClassData] 提供不同的数据源,从而简化测试代码并提高测试覆盖率。这些方法有助于在 .NET 应用程序中进行更有效的单元测试。

示例 1:使用 [InlineData]

这是直接在属性中提供数据的最简单方法。

using Xunit;public class MathTests
{[Theory][InlineData(1, 1, 2)][InlineData(2, 3, 5)][InlineData(10, -5, 5)]public void Add_ReturnsCorrectSum(int a, int b, int expectedSum){// Arrangevar math = new Math();// Actvar result = math.Add(a, b);// AssertAssert.Equal(expectedSum, result);}
}public class Math
{public int Add(int x, int y) => x + y;
}

示例 2:使用 [MemberData]

这允许你引用返回 IEnumerable<object[]> 的方法或属性。

using Xunit;
using System.Collections.Generic;public class MathTests
{public static IEnumerable<object[]> AddData =>new List<object[]>{new object[] { 1, 1, 2 },new object[] { 2, 3, 5 },new object[] { 10, -5, 5 }};[Theory][MemberData(nameof(AddData))]public void Add_ReturnsCorrectSum(int a, int b, int expectedSum){// Arrangevar math = new Math();// Actvar result = math.Add(a, b);// AssertAssert.Equal(expectedSum, result);}
}public class Math
{public int Add(int x, int y) => x + y;
}

示例 3:使用 [ClassData]

这对于更复杂的数据设置非常有用。你可以创建一个实现 IEnumerable<object[]> 的类。

using Xunit;
using System.Collections;
using System.Collections.Generic;public class MathTests
{[Theory][ClassData(typeof(AddTestData))]public void Add_ReturnsCorrectSum(int a, int b, int expectedSum){// Arrangevar math = new Math();// Actvar result = math.Add(a, b);// AssertAssert.Equal(expectedSum, result);}
}public class AddTestData : IEnumerable<object[]>
{public IEnumerator<object[]> GetEnumerator(){yield return new object[] { 1, 1, 2 };yield return new object[] { 2, 3, 5 };yield return new object[] { 10, -5, 5 };}IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}public class Math
{public int Add(int x, int y) => x + y;
}

总结

通过本文的介绍,我们了解了如何使用 xUnit 的 [Theory] 属性来进行参数化测试。无论是使用 [InlineData] 直接提供数据,还是通过 [MemberData][ClassData] 引用外部数据源,这些方法都能帮助我们编写更灵活和高效的单元测试。掌握这些技巧,可以显著提升 .NET 应用程序的测试覆盖率和代码质量,为开发过程带来更多便利和保障。


http://www.mrgr.cn/news/43263.html

相关文章:

  • [C++]使用纯opencv部署yolov11-seg实例分割onnx模型
  • 大数据实时数仓Hologres(四):基于Flink+Hologres搭建实时数仓
  • 组合数求法汇总
  • 【前端】前端数据转化为后端数据
  • GPT新功能Canvas!对普通用户最友好的功能!
  • OutputDebugString函数分析
  • 初识数据结构--时间复杂度 和 空间复杂度
  • NX二次开发 遍历图层中的对象UF_LAYER_cycle_by_layer
  • Linux驱动开发常用调试方法汇总
  • 【PyTorch】图像分割
  • 【Linux】详解Linux下的工具(内含yum指令和vim指令)
  • MES系列-MES赋能智能工厂
  • jQuery——事件处理
  • Linux驱动开发(速记版)--热插拔
  • 数据服务-存储服务(NFS)
  • 王者农药更新版
  • 好用的苹果笔推荐!五大高品质王者款!附避坑宝典助你选购无忧!
  • Java中的封装、继承、多态
  • 视频批量剪辑神器:文案素材与视频合并剪辑一站式解决方案
  • 免费送源码:Java+ssm+JSP+Ajax+MySQL SSM汽车租赁管理系统 计算机毕业设计原创定制