【发布时间】:2012-04-19 10:12:16
【问题描述】:
我希望自定义 AutoFixture 的创建时行为,以便在生成和分配固定装置的属性后设置一些依赖对象。
例如,假设我有一个自定义 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);
}
}
这样的事情可能吗?或者也许有更好的方法来实现我创建匿名对象图的目标?
【问题讨论】:
-
您想为 User 类型创建一个特定实例并在其他地方重用它的 Id 属性值吗?
-
@MarkSeemann:
Do()显然可以在对象完全填充之前执行,所以这是行不通的。我可以(并且确实)手动执行示例 lambda 或在创建后进行对象自定义,但我喜欢类似于上述的替代方法!
标签: c# autofixture