我期待定制AutoFixture的创建时行为,以便在生成并分配灯具的属性后,我可以设置一些相关对象。AutoFixture可以在创建对象时执行委托吗?
例如,假设我有一个自定义的方法的User
,因为它的IsDeleted
属性总是有成为一组特定的测试失败:
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);
}
}
是这样的可能吗?或者有更好的方法来实现我创建匿名对象图的目标?
你想为用户类型的特定实例,并重新使用它的ID属性值别的地方? – 2012-04-05 19:17:35
这有帮助吗? http://stackoverflow.com/questions/5398258/customizing-autofixture-builder-with-seeded-property/5398653#5398653 – 2012-04-05 20:32:26
@MarkSeemann:'Do()'显然可以在对象完全填充之前执行,这样就不会'工作。我可以(也可以)手动执行示例lambda或做我的对象定制后创建,但我喜欢类似于上面的替代! – ladenedge 2012-04-09 07:31:52