有什么方法可以从RepeatCount中了解ISpecimenBuilder吗?我正在为某些参数的名称创建一个新的样本生成器。基本上,Create方法将要求参数名,如果它是"myParamName",类型是。"MyParamType“它将返回一个自定义对象。
但是,如果参数类型是IEnumerable{MyParamType},我想要"CreateMany“,这就很好了。问题is...how很多吗?
我不能调用context.Resolve或context.CreateMany{MyParamType},原因很简单,因为它不会以我所需的方式创建对象。示例:如果MyParamType是string,它将不会创建我需要的格式化字符串。这就是为什么我首先创建了一个样本生成器!:)我也不能为MyParamType注册我的新样本构建器,因为我只需要对特定名称的参数值请求进行定制。否则,我需要默认的行为。
提前谢谢你
发布于 2017-05-03 08:50:53
我不完全确定这是否是您想要做的,但是您不必担心在您的自定义样本构建器中处理IEnumerable<T>的请求;AutoFixture将自动转换 IEnumerable<T>请求转换为多个T请求,然后由您的样本构建器处理。
例如,让我们假设我们有一个定制的样本构建器,它只返回所有string请求的值string
public class FooBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
return request.Equals(typeof(string))
? (object)"foo"
: new NoSpecimen();
}
}现在,这个测试通过了:
[Fact]
public void Should_return_all_foos_for_a_sequence_of_strings()
{
var fixture = new Fixture { RepeatCount = 4 };
fixture.Customizations.Insert(0, new FooBuilder());
var many = fixture.Create<IEnumerable<string>>();
Assert.Equal(4, many.Count());
Assert.All(many, i => Assert.Equal("foo", i));
}因为为了满足请求,AutoFixture确保按需要多次调用FooBuilder。
发布于 2017-05-02 14:45:59
问题is...how很多吗?
默认情况下,这是3。在创建新的Fixture实例时,可以更改此参数:
var fixture = new Fixture { RepeatCount = 4 };https://stackoverflow.com/questions/43740263
复制相似问题