我的测试很简单,我只是想添加一个新的高尔夫球手
[TestClass]public class GolferUnitTest //: GolferTestBase{ public MockGolfEntitIEs _repository; [TestMethod] public voID ShouldAddNewGolferToRepository() { _repository = new MockGolfEntitIEs(); _repository.Golfers = new InMemoryDbSet<Golfer>(CreateFakeGolfers()); int count = _repository.Golfers.Count(); _repository.Golfers.Add(_newGolfer); Assert.IsTrue(_repository.Golfers.Count() == count + 1); } private Golfer _newGolfer = new Golfer() { Index = 8,GuID = System.GuID.NewGuID(),Firstname = "Jonas",Lastname = "PeRSSon" }; public static IEnumerable<Golfer> CreateFakeGolfers() { yIEld return new Golfer() { Index = 1,Firstname = "Bill",Lastname = "Clinton",GuID = System.GuID.NewGuID() }; yIEld return new Golfer() { Index = 2,Firstname = "Lee",Lastname = "Westwood",GuID = System.GuID.NewGuID() }; yIEld return new Golfer() { Index = 3,Firstname = "Justin",Lastname = "Rose",GuID = System.GuID.NewGuID() }; }
我已经使用实体框架和代码优先建立了一个数据模型.我为IDbSet嘲笑一个派生类,以便测试我的上下文(对于在线的人来说,我完全不记得)
public class InMemoryDbSet<T> : IDbSet<T> where T : class{ Readonly HashSet<T> _set; Readonly Iqueryable<T> _queryableSet; public InMemoryDbSet() : this(Enumerable.Empty<T>()) { } public InMemoryDbSet(IEnumerable<T> entitIEs) { _set = new HashSet<T>(); foreach (var entity in entitIEs) { _set.Add(entity); } _queryableSet = _set.Asqueryable(); } public T Add(T entity) { _set.Add(entity); return entity; } public int Count(T entity) { return _set.Count(); } // bunch of other methods that I don't want to burden you with}
当我调试并逐步通过代码时,我可以看到我实例化了_repository并填充了三个假的高尔夫球手,但是当我退出添加功能时,_respoistory.Golfers再次为空.当我添加一个新的高尔夫球手,_set.Add(实体)运行,并且添加了高尔夫球手,但是再次_respoistory.Golfers是空的.我在这里缺少什么?
更新
我很抱歉成为一个白痴,但是我没有在我的MockGolfEntitIEs上下文中实现该集.我没有的原因是我以前尝试,但无法弄清楚如何,继续,忘记了.那么,如何设置一个IDbSet?这是我试过的,但它给我一个Stack Overflow错误.我觉得像一个白痴,但是我无法弄清楚如何写入set函数.
public class MockGolfEntitIEs : DbContext,IContext{ public MockGolfEntitIEs() {} public IDbSet<Golfer> Golfers { get { return new InMemoryDbSet<Golfer>(); } set { this.Golfers = this.Set<Golfer>(); } }}解决方法 您不需要实现get / set,以下代码应该足以为您生成上下文.
public class MockGolfEntitIEs : DbContext,IContext{ public MockGolfEntitIEs() {} public IDbSet<Golfer> Golfers { get; set;}}
我已经实现了您在原始帖子中的代码,并且似乎对我来说,所有内容都可以正常工作 – 您在哪里可以获得InMemoryDbSet的源代码?我在使用NuGet package 1.3,也许你应该尝试那个版本?
总结以上是内存溢出为你收集整理的c# – 使用Mock IDbSet进行单元测试实体框架全部内容,希望文章能够帮你解决c# – 使用Mock IDbSet进行单元测试实体框架所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)