C# 使用AutoFixture创建EF实体存根
例如,我首先得到了由EF数据库生成的这些分部类: 狗:(EF实体) 宠物所有者:(EF实体) 这里我不需要任何EF功能,只需要一个简单的类和一个要测试的属性。我有NUnit,Moq,自动夹具 更新:C# 使用AutoFixture创建EF实体存根,c#,entity-framework,unit-testing,stub,autofixture,C#,Entity Framework,Unit Testing,Stub,Autofixture,例如,我首先得到了由EF数据库生成的这些分部类: 狗:(EF实体) 宠物所有者:(EF实体) 这里我不需要任何EF功能,只需要一个简单的类和一个要测试的属性。我有NUnit,Moq,自动夹具 更新: var dog = fixture.Build<Dog>().Without(x => x.PetOwner).Create(); var dog=fixture.Build().Without(x=>x.PetOwner.Create(); 这解决了问题,但我需要导航属性不为
var dog = fixture.Build<Dog>().Without(x => x.PetOwner).Create();
var dog=fixture.Build().Without(x=>x.PetOwner.Create();
这解决了问题,但我需要导航属性不为null。我无法重现错误。使用以下方法,该测试完全通过:
这将产生与上一个测试相同的结果,其中
PetOwner.Dogs
属性设置为空序列,即。@Enrico Campidoglio,测试永远不会结束。我正在收集更多信息。不要更新你的Q,包括里面的答案。如果你为自己的问题找到了一个有效的答案,你自己回答,并接受它为有效答案(我认为你必须等待两天才能这样做)。这使它对社区有用。并且,如果像在本例中一样,您部分地解决了问题,您可以编辑这个Q,回答它,并用新问题创建一个新的Q。这是一个多一点的工作,但它要好得多。你需要PetOwner.Dogs
集合也被填充吗?@Enrico Campidoglio,不,我只需要Dog
的PetOwner
导航属性和PetOwnerID
和PetOwnerName
。谢谢你,Enrico!是的,现在我也能用了<代码>自定义看起来很酷。我在我真正更复杂的代码中仍然有一个问题,有许多依赖项,如果我发现一些有用的东西,我将补充这些有用的信息。
public partial class PetOwner
{
public int PetOwnerID { get; set; }
public string PetOwnerName { get; set; }
// Navigation property
public virtual ICollection<Dog> Dogs { get; set; }
}
var fixture = new Fixture();
fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList().ForEach(b => fixture.Behaviors.Remove(b));
fixture.Behaviors.Add(new OmitOnRecursionBehavior(1));
var dog = fixture.Create<Dog>();
var dog = fixture.Build<Dog>().Without(x => x.PetOwner).Create();
[Test]
public void CreateEntityWithNavigationProperty()
{
var fixture = new Fixture();
fixture.Behaviors.Add(new OmitOnRecursionBehavior());
var dog = fixture.Create<Dog>();
Assert.That(dog.PetOwner, Is.Not.Null);
Assert.That(dog.PetOwner.Dogs, Is.Empty);
}
[Test]
public void CreateEntityWithNavigationProperty()
{
var fixture = new Fixture();
fixture.Customize<PetOwner>(c =>
c.With(owner => owner.Dogs, Enumerable.Empty<Dog>()));
var dog = fixture.Create<Dog>();
Assert.That(dog.PetOwner, Is.Not.Null);
Assert.That(dog.PetOwner.Dogs, Is.Empty);
}