目录git
Fluent Assertions 是 .NET 平台下的一组扩展方法,用于单元测试中的断言。它使你的单元测试中的断言看起来更天然流畅。断言风格以下:github
string actual = "ABCDEFGHI"; actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);
更多内容可查看 Fluent Assertions Documentationsql
[HttpGet("{id}")] public async Task<IActionResult> Get(int id) { var sampleData = await _sqliteDbContext.SampleEntity .SingleOrDefaultAsync(s => s.Id == id); if (sampleData?.StringValue == "ping") { var pingOk = _foo.Ping("localhost"); if (!pingOk) return NotFound(); } return Ok(sampleData); }
Install-Package FluentAssertions -Version 5.10.2api
咱们对前文中的测试用例进行修改,改动以下:async
// Assert var result = response.Should().BeOfType<OkObjectResult>().Subject; var sampleData = result.Value.Should().BeAssignableTo<SampleEntity>().Subject; sampleData.Id.Should().Be(2); sampleData.BoolValue.Should().BeFalse(); sampleData.StringValue.Should().Be("ping");
完整代码以下单元测试
[TestMethod] public async Task Get_ReturnOK_WithPingTrue_UsingFluentAssertions() { // Arrange var dbContext = await GetSqliteDbContextAsync(); var loggerMock = new Mock<ILogger<SampleController>>(); var logger = loggerMock.Object; var fooMock = new Mock<IFoo>(); fooMock.Setup(foo => foo.Ping("localhost")).Returns(true); var foo = fooMock.Object; var controller = new SampleController(dbContext, logger, foo); // Act var response = await controller.Get(2); // Assert var result = response.Should().BeOfType<OkObjectResult>().Subject; var sampleData = result.Value.Should().BeAssignableTo<SampleEntity>().Subject; sampleData.Id.Should().Be(2); sampleData.BoolValue.Should().BeFalse(); sampleData.StringValue.Should().Be("ping"); }
测试经过
测试