首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoFixture RepeatCount

AutoFixture RepeatCount
EN

Stack Overflow用户
提问于 2017-05-02 14:20:08
回答 2查看 1.2K关注 0票数 2

有什么方法可以从RepeatCount中了解ISpecimenBuilder吗?我正在为某些参数的名称创建一个新的样本生成器。基本上,Create方法将要求参数名,如果它是"myParamName",类型是。"MyParamType“它将返回一个自定义对象。

但是,如果参数类型是IEnumerable{MyParamType},我想要"CreateMany“,这就很好了。问题is...how很多吗?

我不能调用context.Resolve或context.CreateMany{MyParamType},原因很简单,因为它不会以我所需的方式创建对象。示例:如果MyParamType是string,它将不会创建我需要的格式化字符串。这就是为什么我首先创建了一个样本生成器!:)我也不能为MyParamType注册我的新样本构建器,因为我只需要对特定名称的参数值请求进行定制。否则,我需要默认的行为。

提前谢谢你

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-03 08:50:53

我不完全确定这是否是您想要做的,但是您不必担心在您的自定义样本构建器中处理IEnumerable<T>的请求;AutoFixture将自动转换 IEnumerable<T>请求转换为多个T请求,然后由您的样本构建器处理。

例如,让我们假设我们有一个定制的样本构建器,它只返回所有string请求的值string

代码语言:javascript
复制
public class FooBuilder : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        return request.Equals(typeof(string))
            ? (object)"foo"
            : new NoSpecimen();
    }
}

现在,这个测试通过了:

代码语言:javascript
复制
[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
EN

Stack Overflow用户

发布于 2017-05-02 14:45:59

问题is...how很多吗?

默认情况下,这是3。在创建新的Fixture实例时,可以更改此参数:

代码语言:javascript
复制
  var fixture = new Fixture { RepeatCount = 4 };
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43740263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档