【问题标题】:Xunit and EFCore - Mocking One-To-Many relationship does not workXunit 和 EFCore - 模拟一对多关系不起作用
【发布时间】:2021-02-25 09:25:18
【问题描述】:

简介

我在模拟用户与就业之间的一对多关系的数据库时遇到问题。就业已正确添加到模拟数据库,但当同一实体添加到用户实体中的就业集合时,它不会加载。

代码

这些只是这两个类的案例的重要部分

用户

public virtual ICollection<Employement> Employments { get; } = new List<Employment>();

就业

[Required]
[ForeignKey(nameof(User))]
public Guid UserId { get; set; }
public virtual User? User { get; set; }

示例

我使用名为EntityHelper 的东西来创建实体。我创建就业实体,在创建用户实体时使用它(这些都是在我调试时正确创建的)。我使用db.AddRange() 将实体添加到数据库中。

这就是它的样子。

问题

正如我之前提到的,几乎所有内容都已正确添加到数据库中。用户及其数据和就业。然而,用户中的工作集合是空的(即使我创建的用户实体有它)。我不确定这是否是 EF Core 或 XUnit 的问题,或者可能是什么问题。

其他一些可能值得了解的事实:

  • 测试使用 SqlLite 内存数据库
  • 它基于 DbContext

【问题讨论】:

  • 嗨 Anton,由于您在数据库上下文中使用内存数据库,这似乎更像是一个集成测试,而集成测试通常不会 mock 任何东西,在某种意义上您想测试代码的具体实现。当调试器抛出(我怀疑)异常时,您能否提供您收到的错误消息以及调试器的图像?如果您停止调试器,请评估 DbContext.User.ToList() 您会得到预期结果吗?

标签: c# mocking entity-framework-core dbcontext xunit


【解决方案1】:

答案是从数据库中获取用户的 LINQ 查询中缺少 .include(u =&gt; u.Employments)

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2020-03-14
    • 1970-01-01
    相关资源
    最近更新 更多