自定义AutoFixture以创建特定类型

时间:2014-07-08 12:56:07

标签: c# autofixture

我想为NLog的LogLevel类型创建自定义。实例可以通过FromOrdinal静态方法创建。

我想将用于创建的序数限制在范围(0..5)。 请注意,我不想使用生成器自定义整个夹具(因为其他整数可能更大)。

以下是我尝试使用的代码:

class NLogCustomization : ICustomization
    {
        public void Customize(IFixture fixture)
        {
            fixture.Customize<NLog.LogLevel>(
                c => c.FromFactory(() =>
                    {
                        var ordinal = this.nlogOrdinalLevelFactory.Create<int>(); //Throws invalid cast exception
                        return NLog.LogLevel.FromOrdinal((int)ordinal);
                    }));
        }

        private readonly ISpecimenBuilder nlogOrdinalLevelFactory = new RandomNumericSequenceGenerator(0,5);
    }

不幸的是,上面的代码会抛出InvalidCastException。 我在这里做错了什么?

我正在使用3.19.1版。

1 个答案:

答案 0 :(得分:1)

要直接使用RandomNumericSequenceGenerator和任何其他ISpecimenBuilder,请使用ISpecimenBuilder界面:

object Create(object request, ISpecimenContext context);

在此示例中,代替Create<T>执行:

fixture.Customize<LogLevel>(c => c.FromFactory(() =>
{
    var ordinal = this.nlogOrdinalLevelFactory
        .Create(typeof(int), new SpecimenContext(fixture));

    return NLog.LogLevel.FromOrdinal((int)ordinal);
}));