.NET 单元测试

日期 2023-07-13 分组 .NET 标签 .NET 4分钟 · 683字

单元测试

.NET 单元测试是一种软件开发技术,用于验证代码是否按照预期工作。每个单元通常是一个独立的代码模块,例如一个方法或函数。单元测试的目标是确保每个单元都能正确执行其功能,从而提高代码的质量和可靠性。

单元测试的关键点:

断言(MSTest)

常用断言方法:

1
Assert.AreEqual() //验证两个值是否相等。
2
Assert.AreNotEqual() // 验证两个值是否不相等。
3
Assert.IsTrue() // 验证条件是否为 true。
4
Assert.IsFalse() // 验证条件是否为 false。
5
Assert.IsNull() // 验证对象是否为 null。
6
Assert.IsNotNull() // 验证对象是否不为 null。
7
Assert.AreSame() // 验证两个对象是否引用同一个对象。
8
Assert.AreNotSame() // 验证两个对象是否引用不同的对象。
9
Assert.Fail() // 使测试失败,并指定失败消息。
10
Assert.ThrowsException() // 验证是否抛出指定类型的异常。

Mocking

Mocking 指创建一个对象来模拟真实对象。为什么不用真实对象,需要模拟呢?因为有些真实对象是不容易构造或获取的。并且 Mocking 可以隔离测试中的依赖项,确保测试的独立性和稳定性。

使用 Moq

Moq 是一个流行的 .NET Mocking 框架,用于创建和管理模拟对象,验证方法调用、设置返回值等。

使用 Moq 的基本步骤:

示例代码:

1
using Moq;
2
using Xunit;
3
4
// 依赖项接口
5
public interface IService
6
{
7
int GetValue();
8
}
9
10
// 被测试的类
11
public class Consumer
12
{
13
private readonly IService _service;
14
15
public Consumer(IService service)
35 collapsed lines
16
{
17
_service = service;
18
}
19
20
public int GetProcessedValue()
21
{
22
var value = _service.GetValue();
23
return value * 2;
24
}
25
}
26
27
public class ConsumerTests
28
{
29
[Fact]
30
public void GetProcessedValue_ReturnsCorrectValue()
31
{
32
// 创建 Mock 对象
33
var mockService = new Mock<IService>();
34
35
// 设置 Mock 行为和返回值
36
mockService.Setup(s => s.GetValue()).Returns(10);
37
38
// 使用 Mock 对象创建 Consumer 实例
39
var consumer = new Consumer(mockService.Object);
40
41
// 调用被测试的方法
42
var result = consumer.GetProcessedValue();
43
44
// 验证结果
45
Assert.Equal(20, result);
46
47
// 验证 Mock 方法调用
48
mockService.Verify(s => s.GetValue(), Times.Once);
49
}
50
}

假数据生成器

上一篇: 前置机
下一篇: 表达式树