如何对生成的字符串进行后期处理?

时间:2013-11-28 23:27:51

标签: .net autofixture

我想自定义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);
    }
}

1 个答案:

答案 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}}