【发布时间】:2016-02-22 11:11:03
【问题描述】:
我有以下课程:
public class Foo
{
public List<DescriptionInfo> Descriptions { get; set; }
}
public class DescriptionInfo
{
public int LanguageId { get; set; }
public string Value { get; set; }
}
我想使用 Autofixture 创建 Foo 实例。但是,LanguageId 必须来自预定义的列表。因此,我创建了以下自定义:
public class LanguageIdSpecimenBuilder : ISpecimenBuilder
{
private static readonly List<int> LanguageIds = new List<int> {
1,
2,
666,
};
public object Create(object request, ISpecimenContext context)
{
var info = request as PropertyInfo;
if (info != null)
{
if (info.Name == "LanguageID")
{
return LanguageIds.GetRandomElement();
}
}
return new NoSpecimen(request);
}
}
现在一切都很好:
Fixture fixture = new Fixture();
fixture.Customizations.Add(new LanguageIdSpecimenBuilder());
var foo = fixture.Create<Foo>();
但是,还有一个要求:一个语言 ID 不能有重复的条目。我怎样才能做到这一点?
编辑: 例如,有效的实例是:
Foo1:
- LanguageId: 1, Value: "english description_ae154c"
- LanguageId: 2, Value: "zuzulu_510b7g"
Foo2:
- LanguageId: 1, Value: "english description_87f5de"
- LanguageId: 666, Value: "chinese_35e450"
- LanguageId: 2, Value: "zuzulu_fe830d"
无效实例:
Foo1:
- LanguageId: 1, Value: "_04dcd6"
- LanguageId: 1, Value: "_66ccc4"
- LanguageId: 2, Value: "zuzulu_c05b0f"
【问题讨论】:
-
有效语言 ID 列表包含三个值。如果创建四个
Foo实例会发生什么? -
我添加了示例。该要求适用于特定的 Foo 实例,而不是全局范围的。
标签: c# .net testing autofixture