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