C#的单元测试

1. 基本结构

using Microsoft.VisualStudio.TestTools.UnitTesting;

TestClass

public class CalculatorTests

{

TestMethod

public void Add_TwoNumbers_ReturnsSum()

{

// Arrange

Calculator calc = new Calculator();

// Act

int result = calc.Add(2, 3);

// Assert

Assert.AreEqual(5, result);

}

}

2. 主要特性标签

  • TestClass - 标记这是一个测试类
  • TestMethod - 标记这是一个测试方法
  • TestInitialize - 每个测试方法执行前运行
  • TestCleanup - 每个测试方法执行后运行
  • ClassInitialize - 类中所有测试执行前运行一次
  • ClassCleanup - 类中所有测试执行后运行一次

3.常用断言方法

// 相等性测试

Assert.AreEqual(expected, actual);

Assert.AreNotEqual(notExpected, actual);

// 引用测试

Assert.AreSame(expected, actual);

Assert.AreNotSame(notExpected, actual);

// null测试

Assert.IsNull(actual);

Assert.IsNotNull(actual);

// 布尔测试

Assert.IsTrue(condition);

Assert.IsFalse(condition);

// 异常测试

TestMethod

ExpectedException(typeof(DivideByZeroException))

public void Divide_ByZero_ThrowsException()

{

Calculator calc = new Calculator();

calc.Divide(5, 0);

}

  1. 相关案列

Assert.Empty这是Assert的一个方法,用于检查给定的集合、数组或序列是否为空。如果集合不为空,测试将失败。

Assert.Single用于验证集合、数组或序列中是否恰好包含一个元素。如果集合中元素数量不是 1,测试将失败。

5.测试属性

Theory

[Theory] 属性用于标记一个测试方法,表明该方法是一个参数化测试的理论。

[Fact]属性不同,[Fact]属性标记的测试方法不接受任何外部参数

并且总是执行相同的测试逻辑,

[Theory]属性标记的测试方法可以接受来自外部数据源的参数,

并针对不同的参数值执行多次测试。

[Theory]测试方法通常与[InlineData][ClassData][MemberData]等属性一起使用,以提供测试数据。

InlineData 它允许你在测试方法上直接提供测试数据。这种方式使得你可以轻松地为测试方法指定多个参数集,而无需创建额外的数据源。每个使用 InlineData 提供的参数集都会导致测试方法被执行一次。InlineData通常用于提供少量的、简单的测试数据 。如果需要提供大量的测试数据 或更复杂的数据集,可以考虑使用 [MemberData][ClassData]

ClassData 它允许你从类或静态方法提供的数据源中动态获取测试数据。这种方式特别适用于需要提供大量测试数据或数据生成逻辑较复杂的场景。通过 ClassData,你可以将测试数据与测试方法分离,使得测试代码更加清晰和可维护

MemberData 它允许测试方法从类的成员(如属性或方法)中获取测试数据。这种方式使得测试方法能够针对多种不同的输入数据进行重复执行,从而验证代码在不同条件下的行为。

// 验证结果

Assert.NotNull(aa); // 确保结果不为空

Assert.Equal(expected.TotalCount, aa.TotalCount); // 验证总数量

Assert.Equal(expected.bb.Count(), aa.bb.Count()); // 验证结果数量

Assert.Distinct(aa.bb); // 验证结果无重复

Assert.Equal(expected.bb.ToArray(), aa.bb.ToArray()); // 验证结果内容

6.Collection

[CollectionDefinition(aaaaCollection")] 是C#中用于定义测试集合的一个特性(Attribute)标记。在.NET的单元测试中,特别是使用xUnit测试框架时,这个特性允许你定义一个测试集合(Collection),这对于需要共享测试环境或资源的测试来说非常有用。

相关推荐
神仙别闹4 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读5 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
林川~015 小时前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
2601_966949658 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571768 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
He BianGu9 小时前
【WPF-VisionMaster】机器视觉通用平台V5.0版本发行说明
opencv·c#·wpf·halcon·机器视觉·visionmaster
tang_04279 小时前
【Hi.Ltd 专题】第9期:Interop 配置互操作(JSON/INI/XML/YAML/注册表/扫码)
经验分享·c#·hi.ltd系列
RAN11426760089 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .10 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^1382879887210 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居