【发布时间】:2016-02-25 11:36:54
【问题描述】:
例如,我有这些由 EF Database First 生成的部分类:
狗: (EF 实体)
public partial class Dog
{
public int DogID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public int PetOwnerID { get; set; }
// Navigation property
public virtual PetOwner PetOwner { get; set; }
}
宠物主人: (EF 实体)
public partial class PetOwner
{
public int PetOwnerID { get; set; }
public string PetOwnerName { get; set; }
// Navigation property
public virtual ICollection<Dog> Dogs { get; set; }
}
我需要一个简单的Dog 类型的存根用于单元测试。但是当我尝试使用 AutoFixture 生成存根时,会抛出递归依赖异常。如果我尝试像这样更改夹具行为,它会挂起。
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>();
我在这里不需要任何 EF 功能,只需要一个带有要测试的属性的简单类。我有 NUnit、Moq、AutoFixture。
更新:
var dog = fixture.Build<Dog>().Without(x => x.PetOwner).Create();
这解决了问题,但我需要一个导航属性不为空。
【问题讨论】:
-
@Enrico Campidoglio,测试永远不会结束。我现在正在尝试收集更多信息。
-
不要更新你的 Q,包括你的答案。如果您为自己的问题找到了有效的答案,请自己回答,并接受它为有效(我认为您必须等待几天才能这样做)。这使它对社区有用。并且,如果像本例那样,您部分解决了问题,您可以编辑此 Q,回答它,然后创建一个包含新问题的新 Q。工作量要多一些,但要好得多。
-
您还需要填充
PetOwner.Dogs集合吗? -
@Enrico Campidoglio,不,我只需要
Dog的PetOwner导航属性和PetOwnerID和PetOwnerName。
标签: c# entity-framework unit-testing stub autofixture