单元测试
.NET 单元测试是一种软件开发技术,用于验证代码是否按照预期工作。每个单元通常是一个独立的代码模块,例如一个方法或函数。单元测试的目标是确保每个单元都能正确执行其功能,从而提高代码的质量和可靠性。
单元测试的关键点:
自动化:单元测试通常是自动化的,这意味着可以通过运行测试脚本来自动验证代码的功能。
独立性:每个单元测试应独立于其他测试,确保测试结果不受其他代码部分的影响。
可重复性:单元测试应能在不同时间和不同环境中重复运行并得到相同的结果。
断言(MSTest)
常用断言方法:
1 2 3 4 5 6 7 8 9 10
| Assert.AreEqual() Assert.AreNotEqual() Assert.IsTrue() Assert.IsFalse() Assert.IsNull() Assert.IsNotNull() Assert.AreSame() Assert.AreNotSame() Assert.Fail() Assert.ThrowsException()
|
Mocking
Mocking 指创建一个对象来模拟真实对象。为什么不用真实对象,需要模拟呢?因为有些真实对象是不容易构造或获取的。并且 Mocking 可以隔离测试中的依赖项,确保测试的独立性和稳定性。
使用 Moq
Moq 是一个流行的 .NET Mocking 框架,用于创建和管理模拟对象,验证方法调用、设置返回值等。
使用 Moq 的基本步骤:
- 安装 Moq:在你的项目中安装 Moq 包(例如通过 NuGet)。
- 创建 Mock 对象:使用 Moq 创建模拟对象。
- 设置行为和返回值:配置模拟对象的行为和返回值。
- 验证调用:在测试中验证模拟对象的方法是否被调用。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| using Moq; using Xunit;
public interface IService { int GetValue(); }
public class Consumer { private readonly IService _service;
public Consumer(IService service) { _service = service; }
public int GetProcessedValue() { var value = _service.GetValue(); return value * 2; } }
public class ConsumerTests { [Fact] public void GetProcessedValue_ReturnsCorrectValue() { var mockService = new Mock<IService>();
mockService.Setup(s => s.GetValue()).Returns(10);
var consumer = new Consumer(mockService.Object);
var result = consumer.GetProcessedValue();
Assert.Equal(20, result);
mockService.Verify(s => s.GetValue(), Times.Once); } }
|
假数据生成器