【问题标题】:How to create an Entity Framework DbContext for unit testing in TDD?如何为 TDD 中的单元测试创​​建实体框架 DbContext?
【发布时间】:2015-07-15 19:31:53
【问题描述】:

我正在学习测试驱动开发 (TDD),因此我可以在我开始的项目中使用它,但我遇到了一个关于如何设置特定类型测试的问题'想做。

场景是我有一个视图,允许某人编辑有关用户的信息(例如用户名、名字、姓氏等)。在许多情况下,他们正在编辑的这个用户已经存在于数据库中,因此当他们点击保存时,该视图的视图模型会在数据库中更新信息。

我想测试的是视图模型正在将此信息保存到数据库中。这是使用我在构造期间传递到视图模型的实体框架 DbContext 完成的,这意味着我需要在单元测试中创建一个 DbContext 以传递到可以更新和比较的视图模型中。

我想测试的断言是这样的:

Assert.AreEqual(ViewModelFake.EditedUser.Username, DataBaseContextFake.Users.Find(1).Username);

在单元测试最初创建 DbContext 后,它会使用用户填充它,然后在单元测试中更改用户信息。在视图模型中测试的命令负责将编辑后的信息保存到数据库中,替换 DbContext 最初填充的内容。

在过去两天的大部分时间里,我一直在寻找解决方案,但无法找到人们做同样事情的例子。这甚至应该在单元测试中处理吗?请注意,我没有在实体框架之上使用存储库/工作单元层。

【问题讨论】:

  • 您的问题已在我的博客vannevel.net/2015/02/26/11 上得到解答
  • 这正是我想要的:一个非常简单的解释,单元测试代码的正面没有太多额外的膨胀。谢谢!

标签: c# entity-framework unit-testing mvvm


【解决方案1】:

在工作中,我们在项目中创建了对实体框架上下文的抽象。

假设我们有一个接口,我们称它为 IMyCompanyContext,它公开了您在 DbContext 中使用的所有方法,包括 SaveChanges();方法。所有数据库映射的集合都使用 ICollection 接口通过此接口公开。 Query 提供者理解我们的查询(它在运行时检查该接口后面是一个真实的 DbContext)。不仅如此,您还可以使用控制反转方法,甚至可以使用 DI 容器来请求新的 IMyCompanyContext。

如果你想对此进行测试,你只需要用一个虚假的上下文来实现你的上下文,该上下文会公开一些你可以查询的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2012-08-25
    相关资源
    最近更新 更多