gpt4 book ai didi

c# - 如何使用存储库模式伪造 Entity Framework 中的 DbContext.Entry 方法

转载 作者:IT王子 更新时间:2023-10-29 03:59:04 29 4
gpt4 key购买 nike

因为我想对我的代码进行单元测试,所以我在我的 MVC4 应用程序中实现了存储库模式。我设法制作了一个上下文接口(interface),一个伪造的上下文,并使用了一个伪造的 System.Data.Entity.DbSet 实现。通过关注 this代码。

不幸的是,就像我之前的两个发帖人(herehere)一样,我无法 mock DbContext.Entry method。 .我使用这种方法在我的代码中更新数据库条目,如下所示:

DbContext.Entry(order).State = EntityState.Modified;

我还没有找到解决这个问题的方法,只有那些说这样的话的人:

"and what is the point of unit testing this code? You fake the Find method, then you fake DbEntityEntry and there will be no real logic to test."

或到

read this and all linked questions before you continue. (...) If you want to test your repositories create integration tests talking to the real database.

一切都很好,但问题仍然没有答案。我读了评论,但我仍然想要这个 Entry 方法,这样我就可以在我的单元测试中使用伪造的上下文和模拟对象。当然,我也会使用集成测试,但它们不如一些快速单元测试快。

我在尝试某些实现时收到的错误是 Error 2 'Project.Models.Order' 不包含 'State' 的定义并且没有扩展方法 'State' 接受类型为 '[可以找到我使用的任何返回类型]'(您是否缺少 using 指令或程序集引用?)

我希望有人能帮我做一个假的 DbContext.Entry 方法。

最佳答案

找到答案 here通过“添加额外的间接级别”,我们得到:

public virtual void SetModified(object entity)
{
Entry(entity).State = EntityState.Modified;
}

并在我们的 Controller 中使用 DbContext.SetModified(entity)。mockContext.Setup(c => c.SetModified(It.IsAny()));

关于c# - 如何使用存储库模式伪造 Entity Framework 中的 DbContext.Entry 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471927/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com