使用AutoFixture为字符串属性生成匿名数字

本文关键字:数字 属性 AutoFixture 字符串 使用 | 更新日期: 2023-09-27 18:23:48

我正在单元测试一些映射方法,我有一个字符串类型的源属性,它映射到integer类型的目标属性。

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

这可能吗?

使用AutoFixture为字符串属性生成匿名数字

解决此问题的最佳方法是创建一个基于约定的自定义值生成器,该生成器根据特定属性的名称将匿名数值的字符串表示形式分配给

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

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>();