所以按照这个例子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, EmpresaId =1, Descripcion ="La Paz", FechaProceso = DateTime.Now, MarcaBaja = null, UsuarioId = 1}, new Ciudad {CiudadId = 3, EmpresaId =1, Descripcion ="Cochabamba", FechaProceso = DateTime.Now, MarcaBaja = null, 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 Tryign现在使用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);我得到这个错误 无法将System.Collections.Generic.IEnumerable(FakeDbSet(Ciudad))转换为System.Data.Entity.IDbSet(Ciudad)无法放置“ ”,因此我在错误消息中替换为“()”IContext和FakeDbSet的实现public interface IContext{ IDbSet<Ciudad> Ciudades { get; }}public class FakeDbSet<T> : IDbSet<T> where T : class如何使它工作? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 一点点...在类似的东西中: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没有直接针对该模式的故事(毕竟它是编译器的语法糖,特别不适合反射或与任何其他约定保持一致),但是您可以使用AddManyTo,只要其中包含ICollection玩。幸运的是,在本文的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>的setter的prop,并让AF生成父对象,从而使所述集合被填充。长期被取代的旁注:在您最初的问题中,您实际上有:fixture.Build<FakeDbSet<Ciudad>>().CreateMany()然后问题变得更加明显-您正在要求AF生成许多FakeDbSet<Ciudad>,这不是您想要的。 (adsbygoogle = window.adsbygoogle || []).push({}); 08-15 17:43