简体   繁体   English

如何在 .NET CORE 中使用 xUnit 测试强类型的 IQueryable

[英]how to test IQueryable of strongly typed using xUnit in .NET CORE

I am working on a test project for .NET CORE Web API project.我正在为 .NET CORE Web API 项目开发一个测试项目。 I have SchoolService class that implements numbers of methods as some of them below我有 SchoolService 类,它实现了许多方法,如下所示

Service Class服务等级

 public class SchoolService : ISchoolService
{
    private readonly ISchoolEntity schoolEntity;

    public SchoolService(ISchoolEntity schoolEntity)
    {
        this.schoolEntity = schoolEntity;
    }


    public IQueryable<SchoolDataView> GetAllSchools()
    {
        var query = this.schoolEntity.GetAllSchool();
        return query;
    }

    public SchoolDataView GetSchoolById(Guid Id)
    {
        var query = this.schoolEntity.GetSchoolById(Id);
        return query;
    }

I want to test 1- GetAllSchools return object type is of IQueryable?我想测试 1-GetAllSchools 返回对象类型是 IQueryable 吗? 2- How I use autofix or by another way for schoolEntity.GetAllSchool() return fake IQueryable? 2-我如何使用自动修复或以其他方式为 schoolEntity.GetAllSchool() 返回假 IQueryable?

Service Test服务测试

 public class SchoolServiceTests
{
    private readonly ISchoolService schoolService;
    private readonly ISchoolEntity schoolEntity = Substitute.For<ISchoolEntity>();

    public SchoolServiceTests()
    {
        schoolService = new SchoolService(schoolEntity);
    }

    [Fact]
    public void GetAllSchool_ShouldReturn_IQueryableOfSchoolDataView()
    {
        //Arrange


        //Act
        var a = schoolEntity.GetAllSchool();

        //Assert
        Assert.??
    }
}

I have written following test to achieve behaviour that I have stated in my question.我编写了以下测试来实现我在问题中陈述的行为。 Open to hearing more feedback and suggestions on it.愿意听取更多关于它的反馈和建议。 Thanks谢谢

    [Fact]
    public void GetAllSchool_ShouldReturn_IQueryableOfSchoolDataView()
    {
        //Arrange
  
        var schoolDataViewList = new List<SchoolDataView>
        {
            new SchoolDataView { SchoolID = Guid.NewGuid(), Name = "London Primary School"},
            new SchoolDataView { SchoolID = Guid.NewGuid(), Name = "Windsor Gramer School"},
            new SchoolDataView { SchoolID = Guid.NewGuid(), Name = "Kings College"},
            new SchoolDataView { SchoolID = Guid.NewGuid(), Name = "Reading School"}
        }.AsQueryable();

        schoolEntity.GetAllSchool().Returns(schoolDataViewList);

        //Act
        var actualSchoolList = sut.GetAllSchools();

        //Assert
        Assert.IsAssignableFrom<IQueryable<SchoolDataView>>(actualSchoolList);
    }

OR Using AutoFixture或使用 AutoFixture

 [Fact]
    public void GetAllSchool_ShouldReturn_IQueryableOfSchoolDataView()
    {
        //Arrange
        var fixture = new Fixture();

        var schoolDataViewMock = fixture.CreateMany<SchoolDataView>();
       
        schoolEntity.GetAllSchool().Returns(schoolDataViewMock.AsQueryable());

        //Act
        var actualSchoolDataList = sut.GetAllSchools();

        //Assert
        Assert.IsAssignableFrom<IQueryable<SchoolDataView>>(actualSchoolDataList);
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM