使用 MSTest 在 C# 中模拟筛选的数据

Mocking Filtered Data in C# with MSTest

提问人:Ntavass 提问时间:11/9/2023 更新时间:11/9/2023 访问量:54

问:

我是 C# 的新手,我正在尝试使用 MSTest 模拟 C# 单元测试中的过滤数据,用于从数据库中检索学生数据的服务。下面的代码成功地模拟了整个学生数据列表,但未能根据指定的条件正确筛选数据。

public class NewRequestServiceTests
{
    private readonly NewRequestService _newRequestService;
    private readonly Mock<DatabaseContext> _databaseContext;

    private StudentData _studentDataDE;
    private StudentData _studentDataFR  ;

    public NewRequestServiceTests()
    {
        _databaseContext = new Mock<DatabaseContext>();
        _newRequestService = new NewRequestService(_databaseContext.Object);
    }

    [TestInitialize]
    public void Setup()
    {
       _InitializeTestDataBeforeTests();  //Initialize dummy data
       _databaseContext.Setup(dc => dc.StudentData).ReturnsDbSet(new List<StudentData>
           {
               _studentDataDE, // initialized in the _InitializeTestDataBeforeTests() method
               _studentDataFR  // initialized in the _InitializeTestDataBeforeTests() method
           });
    }

    [TestMethod]
    public async Task GetNewRequest_ValidResponse()
    {
         var studentId = 1;
         var response = await _newRequestService.GetNewRequest(studentId , new List<int>());
         // Asserts
         // ...
    } 
}

在另一种方法中,使用以下代码筛选数据:

var studentDataList = await _databaseContext.StudentData
        .Include(e => e.ApplicableEducationalLegislationBasis)
        .Where(sd => sd.StudentId == id
                     && sd.ApplicableEducationalLegislationBasis.IsActive == true
                     && sd.AssessingSchoolAuthorityId != userAuthority.Code)
        .ToListAsync();

此代码不会引发错误,但会返回一个空列表。有人有任何想法或相关话题吗?

先谢谢你。

C# .NET 实体框架 单元测试 mstest

评论

1赞 topsail 11/9/2023
显而易见的答案是,没有符合标准的数据。因此,由您先研究一下。
0赞 Ralf 11/9/2023
你用“最小起订量”嘲笑?ReturnsDbSet 是你写的东西吗?
1赞 Ntavass 11/9/2023
神。。。我一直在研究这个问题很长时间,以至于我什至没有想到这一点,在数据初始化中缺少一个字段,我从未注意到......非常感谢@topsail。
0赞 Ntavass 11/9/2023
@Ralf这是我的错,我在数据初始化中忘记了一个字段,我从来没有注意到它。
0赞 ndc85430 11/10/2023
该类型是否来自您的数据库库?你为什么要嘲笑它?DatabaseContext

答: 暂无答案