我希望能够自定义创建时间行为的 AutoFixture,以便在生成和分配 fixture 属性后设置一些依赖对象。
例如,假设我有一个方法,该方法定制了一个
这种情况是否可能?或者也许有更好的方法来实现我的目标,创建一个匿名对象图?
例如,假设我有一个方法,该方法定制了一个
User
,因为它的 IsDeleted
属性对于某些测试必须始终为 false:public class User
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
}
public static ObjectBuilder<User> BuildUser(this Fixture f)
{
return f.Build<User>().With(u => u.IsDeleted, false);
}
(我将一个ObjectBuilder
返回给测试,以便在必要时进一步自定义夹具。)
我想做的是,在创建时自动将该用户与匿名集合通过其Id
关联起来,但是我不能这样做,因为在我将返回值交还给单元测试之前,Id
尚未生成。以下是我正在尝试的内容:
public static ObjectBuilder<User> BuildUserIn(this Fixture f, UserCollection uc)
{
return f.Build<User>()
.With(u => u.IsDeleted, false);
.AfterCreation(u =>
{
var relation = f.Build<UserCollectionMembership>()
.With(ucm => ucm.UserCollectionId, uc.Id)
.With(ucm => ucm.UserId, u.Id)
.CreateAnonymous();
Repository.Install(relation);
}
}
这种情况是否可能?或者也许有更好的方法来实现我的目标,创建一个匿名对象图?
Do()
显然可以在对象完全填充之前执行,所以这不起作用。我可以(并且确实)手动执行示例 lambda 或在创建后进行对象自定义,但我希望有一种类似于上面的替代方法! - ladenedge