自定义AutoFixture以创建特定的类型
本文关键字:类型 创建 AutoFixture 自定义 | 更新日期: 2023-09-27 18:11:52
我想为NLog的LogLevel类型创建自定义。实例可以通过FromOrdinal静态方法创建。
我想限制用于创建的序数范围(0..5)。请注意,我不想用生成器定制整个fixture(因为其他整数可能更大)。
下面是我尝试使用的一段代码:
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版本
要直接使用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);
}));