有没有办法从ISpecimenBuilder知道RepeatCount?我正在为某个参数名称创建一个新的样本构建器。基本上,Create方法将询问参数名称,以防万一。 “myParamName”,类型例如是“MyParamType”它将返回一个自定义对象。
这很完美,但是,如果参数类型是IEnumerable {MyParamType},我想“CreateMany”。问题是......有多少?
我无法调用context.Resolve或context.CreateMany {MyParamType},原因很简单,它不会按照我需要的方式创建我的对象。示例:如果MyParamType是字符串,则不会创建我需要的格式化字符串。这就是为什么我首先创建了一个标本构建器!:)我也无法为MyParamType注册我的新标本构建器,因为我只需要对特定名称的参数值请求进行自定义。否则,我需要默认行为
提前谢谢
答案 0 :(得分:1)
我不完全确定这是否是您要做的事情,但您不必担心在自定义样本构建器中处理IEnumerable<T>
的请求; AutoFixture会IEnumerable<T>
T
向<{1}}请求多个请求,然后由您的样本构建者处理。
例如,我们假设我们有一个自定义样本构建器,只为"foo"
的所有请求返回值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
以满足请求。
答案 1 :(得分:0)
问题是......有多少?
默认情况下,这是3.您可以在创建新的Fixture
实例时更改此参数:
var fixture = new Fixture { RepeatCount = 4 };