编程语言
首页 > 编程语言> > c# – 使用AutoFixture为字符串属性生成匿名编号

c# – 使用AutoFixture为字符串属性生成匿名编号

作者:互联网

我正在测试一些映射方法,我有一个string类型的source属性,它被映射到integer类型的目标属性.

所以我希望AutoFixture使用特定字符串属性的匿名整数创建源对象,而不是所有字符串属性.

这可能吗?

解决方法:

解决此问题的最佳方法是将create a convention based custom value generator根据其名称将匿名数值的字符串表示形式分配给特定属性.

那么,举一个例子,假设你有一个这样的类:

public class Foo
{
    public string StringThatReallyIsANumber { get; set; }
}

自定义值生成器如下所示:

public class StringThatReallyIsANumberGenerator : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var targetProperty = request as PropertyInfo;

        if (targetProperty == null)
        {
            return new NoSpecimen(request);
        }

        if (targetProperty.Name != "StringThatReallyIsANumber")
        {
            return new NoSpecimen(request);
        }

        var value = context.CreateAnonymous<int>();

        return value.ToString();
    }
}

这里的关键点是自定义生成器只会定位名为StringThatReallyIsANumber的属性,在本例中是我们的约定.

要在测试中使用它,您只需通过Fixture.Customizations集合将其添加到Fixture实例:

var fixture = new Fixture();
fixture.Customizations.Add(new StringThatReallyIsANumberGenerator());

var anonymousFoo = fixture.CreateAnonymous<Foo>();

标签:c,unit-testing,autofixture
来源: https://codeday.me/bug/20190613/1234304.html