zoukankan      html  css  js  c++  java
  • .NET Core之单元测试(四):Fluent Assertions的使用

    什么是Fluent Assertions

    Fluent Assertions.NET 平台下的一组扩展方法,用于单元测试中的断言。它使你的单元测试中的断言看起来更自然流畅。断言风格如下:

    string actual = "ABCDEFGHI";
    actual.Should().StartWith("AB").And.EndWith("HI").And.Contain("EF").And.HaveLength(9);
    

    更多内容可查看 Fluent Assertions Documentation

    待测试API

    [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.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");
    

    完整代码如下

    [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");
    }
    

    测试通过
    在这里插入图片描述

  • 相关阅读:
    UVALive 7456 Least Crucial Node (并查集)
    UVALive 7454 Parentheses (栈+模拟)
    HDU 5778 abs (枚举)
    HDU 5776 sum (模拟)
    HDU 5806 NanoApe Loves Sequence Ⅱ (模拟)
    HDU 5805 NanoApe Loves Sequence (模拟)
    HDU 5734 Acperience (推导)
    HDU 5842 Lweb and String (水题)
    HDU 5833 Zhu and 772002 (高斯消元)
    HDU 5835 Danganronpa (贪心)
  • 原文地址:https://www.cnblogs.com/zhaobingwang/p/12358573.html
Copyright © 2011-2022 走看看