我想自定义AutoFixture的字符串生成,以便生成的字符串只包含字母。如果我明确要求AutoFixture为string
,我只需要申请这个;我不需要这个适用于属性或其他任何间接的。我打算通过转换AutoFixture生成的字符串来做到这一点。
因此,我有一些方法可以进行这种转换:
string ConvertToLettersOnly(string text);
如何告诉AutoFixture通过此方法对所有生成的字符串进行后处理?
我尝试了以下两种方法,但它们似乎会导致无限递归:
1
Fixture.Customize<string>(c => c.FromFactory<string>(ConvertToLettersOnly));
2
class LettersOnlySpecimenBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var type = request as Type;
if (type == typeof(string))
{
var text = (string)context.Resolve(request);
return ConvertToLettersOnly(text);
}
return new NoSpecimen(request);
}
}
答案 0 :(得分:2)
使用AutoFixture查看Generator<T>
中应用的Customize
。
如果这不合适,您可能希望将Mark's excellent implementation of the String calculator kata中使用的impl方法用作ConstrainedStringGenerator
。
将其应用为fixture.Customize( (Generator<char> generator) =>
{
var filteredGenerator =
from specimen in generator
where TODOILike( specimen)
select specimen;
return String.Concat( filteredGenerator.Take( TODOLengthILike));
});
可以这样做:
{{1}}