自动化测试框架
MSTest:Visual Studio 自带测试框架,无需为测试项目安装第三方包。
官方文档:https://docs.microsoft.com/zh-cn/dotnet/core/testing/unit-testing-with-mstest
其他方案:NUnit、xUnit
隔离框架
隔离框架分为 受限框架
和 不受限框架
,受限框架不能伪造静态方法、非虚拟方法和非公共方法等方法。
受限框架
Moq:模拟对象框架,可生成 Stub 和 Mock 伪对象,隔离测试依赖。
官方文档:https://github.com/Moq/moq4/wiki/Quickstart
示例:
[TestMethod]
public void GetList_DefaultDto_ShouldReturn2Models()
{
// Arrange
var dto = new GetListDto();
var fakeList = new List<Model> { new Model(), new Model() }
// 通过 Moq 创建 Stub 对象,并设定其返回值
var stubManager = new Mock<IManager>();
stubManager.Setup(x => x.GetList()).Returns(fakeList);
// 注入 Stub 对象
var controller = new MyController(_mapper, stubManager.Object);
// Act
var result = controller.GetList(dto) as ObjectResult;
var value = result.Value as GetListResultDto;
// Assert
value.ShouldNotBeNull();
value.status.ShouldBe(200);
value.data.Count.ShouldBe(2);
}
其他方案:NSubstitute、NMock、EasyMock、FakeItEasy
不受限框架
Microsoft Fakes、Typemock Isolator、JustMock
断言框架
Shouldly:提供可读性更强的断言、更清晰的错误信息。
官方文档:https://docs.shouldly.io/
示例:
// 默认断言
Assert.That(map.IndexOfValue("boo"), Is.EqualTo(2));
// -> Expected 2 but was 1
// Shouldly断言
map.IndexOfValue("boo").ShouldBe(2);
// -> map.IndexOfValue("boo") should be 2 but was 1
其他方案:FluentAPI
Comments