我正在编写使用通过Autofac解析的数据库的单元测试。数据全部通过伪造进行模拟。
以下是数据示例:
internal static ICollection<ObjectA> GenerateObjectA(int numberToGenerate)
{
var objectAIds = 1;
var objectB = GenerateObjectB(1).First();
var fakeObjectAs = new Faker<ObjectA>()
.RuleFor(x => x.EntityStatus, f => EntityStatus.Active)
.RuleFor(x => x.ObjectAId, f => objectAIds++)
.RuleFor(x => x.ObjectB, f => objectB)
.RuleFor(x => x.ObjectB, f => objectB.ObjectBId);
return fakeObjectAs.Generate(numberToGenerate).ToList();
}
internal static ICollection<ObjectB> GenerateObjectB(int numberToGenerate)
{
var objectBIds = 1;
var fakeObjectB= new Faker<ObjectB>()
.RuleFor(x => x.EntityStatus, f => EntityStatus.Active)
.RuleFor(x => x.ObjectBId, f => objectBIds++);
return fakeObjectB.Generate(numberToGenerate).ToList();
}
现在是我播种的位置:
var objectA = LogisticsSeedData.GenerateObjectA(1).First();
_contextOptionsHelper.Seed(objectA).Also(objectA.ObjectB);
_dbcontext.ObjectAs.Add(objectA);
_dbcontext.ObjectBs.Add(objectA.ObjectB);
_dbcontext.SaveChanges();
[每当我逐步完成测试的设置时,_dbContext都会按预期包含ObjectA.ObjectB,但是一旦我解析了服务并进入测试,数据库就会拥有ObjectA但ObjectB为空。我做错什么了吗?
没有看到您的测试很难说。确保在查询中包括嵌套数据。看起来应该如下所示:
_dbContext.ObjectAs.Include(a => a.ObjectBs)
相关信息here
如果这不是问题,可以尝试在问题中添加一些测试示例吗?这将帮助人们做出更具体的响应。