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

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

4. 相关案列

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),这对于需要共享测试环境或资源的测试来说非常有用。


http://www.kler.cn/a/451770.html

相关文章:

  • C#调用OpenXml,读取excel行数据,遇到空单元跳过现象处理
  • 领克Z20结合AI技术,革新自动驾驶辅助系统
  • 面试场景题系列:设计一致性哈希系统
  • 突发!GitLab将停止对中国区用户提供GitLab.com账号服务
  • 各种网站(学习资源及其他)
  • 【C++基础】09、结构体
  • 论文阅读:Deep Fusion Clustering Network With Reliable Structure Preservation
  • 使用VsCode编译调试Neo4j源码
  • 重温设计模式--代理、中介者、适配器模式的异同
  • 两道数组有关的OJ练习题
  • ubuntu使用ffmpeg+ZLMediaKit搭建rtsp推流环境
  • Android14 OTA升级速度过慢问题解决方案
  • PR基础(2)
  • Java 中反射的高级用法:窥探 Java 世界的魔法之门
  • 《Vue进阶教程》第二十课:lazy懒执行
  • HDMI、MIPI、DP的区别和用途
  • Spring_05_IOC容器启动细节
  • 亚信安全与方天股份达成战略合作,双向奔赴助力数字化转型
  • vue3入门教程:reactive函数
  • 04、Vue与Ajax
  • Neo4j Desktop 无法打开
  • 字符编码(二)
  • V900新功能-电脑不在旁边,通过手机给PLC远程调试网关配置WIFI联网
  • Info.plist contained no UIScene configuration dictionary (looking for configura
  • What‘s the term “unused memory“ in PyTorch?
  • 16爬虫:使用requests和scrapy分别从链家获取二手房信息