实体框架 – 使用伪造的DbContext和Autofixture以及Moq进行测试
所以请遵循这个例子
example和如何制作一个假的DBContex测试我的测试使用这个工作正常 [Test] public void CiudadIndex() { var ciudades = new FakeDbSet<Ciudad> { new Ciudad {CiudadId = 1,EmpresaId =1,Descripcion ="Santa Cruz",FechaProceso = DateTime.Now,MarcaBaja = null,UsuarioId = 1},new Ciudad {CiudadId = 2,Descripcion ="La Paz",new Ciudad {CiudadId = 3,Descripcion ="Cochabamba",UsuarioId = 1} }; //// Create mock unit of work var mockData = new Mock<IContext>(); mockData.Setup(m => m.Ciudades).Returns(ciudades); // Setup controller var homeController = new CiudadController(mockData.Object); // Invoke var viewResult = homeController.Index(); var ciudades_de_la_vista = (IEnumerable<Ciudad>)viewResult.Model; // Assert.. } Iam现在尝试使用Autofixture-Moq 创造“ciudades”,但我不能.我试试这个 var fixture = new Fixture(); var ciudades = fixture.Build<FakeDbSet<Ciudad>>().CreateMany<FakeDbSet<Ciudad>>(); var mockData = new Mock<IContext>(); mockData.Setup(m => m.Ciudades).Returns(ciudades); 我收到这个错误
不能把“<>”所以我在错误消息中用“()”替换 IContext和FakeDbSet的实现 public interface IContext { IDbSet<Ciudad> Ciudades { get; } } public class FakeDbSet<T> : IDbSet<T> where T : class 怎么能让这个工作? 解决方法
一个小问题……在以下方面:
var ciudades_fixture = fixture.Build<Ciudad>().CreateMany<Ciudad>(); 第二种类型arg是不必要的,应该是: var ciudades_fixture = fixture.Build<Ciudad>().CreateMany(); 我真的明白为什么你需要一个FakeDbSet而且这篇文章有点TL; DR …一般来说,我试图避免伪造和混淆ORM位,而是处理可能最大程度地返回POCO的接口. 除此之外……初始化列表的正常语法工作原因是DBFixture中有Add(和IEnumerable). AutoFixture直接没有关于该模式的故事(毕竟它是编译器语法糖,并不特别适合反射或符合任何其他约定)但只要存在ICollection,您就可以使用AddManyTo.幸运的是,在文章中FakeDbSet的内容中,以下内容为我们提供了一个: public ObservableCollection<T> Local { get { return _data; } } 作为ObservableCollection< T>从ICollection< T>派生,您应该能够: var ciudades = new FakeDbSet<Cuidad>(); fixture.AddManyTo(ciudades.Local); var mockData = new Mock<IContext>(); mockData.Setup(m => m.Ciudades).Returns(ciudades); 可以连接自定义以使其更漂亮,但至少您有办法管理它.另一种选择是让某些东西实现ICollection(或者使用设置器获取IEnumerable< T>并让AF生成父对象,使得所述集合被填充). 长期取代的旁注:在您的初始问题中,您实际上有: fixture.Build<FakeDbSet<Ciudad>>().CreateMany() 问题变得更加清晰了 – 你要求AF生成许多FakeDbSet< Ciudad> s,这不是你想要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-3 – asp.net mvc 3.0客户端验证无效
- asp.net-mvc – CSS / Javascript缩小和捆绑在MVC中究竟是如
- asp.net-mvc – FluentValidation Autofac ValidatorFactor
- asp.net-mvc – asp.net mvc 4将表单从站点发送到电子邮件
- asp.net-mvc – 如何将特定于HTTP-Request的对象注入到我提
- asp.net-mvc – 数以千计的重定向不好SEO?
- asp.net – 在日历上设置最小和最大日期?
- asp.net – ImageButton不会在IE10上发回帖子
- asp.net使用什么而不是viewstate
- asp.net – 为什么设置AssociatedUpdatePanelId时不会触发U