首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用自动夹具填充夹具的集合属性

用自动夹具填充夹具的集合属性
EN

Stack Overflow用户
提问于 2014-04-10 16:00:00
回答 3查看 5.8K关注 0票数 5

我刚刚开始使用AutoFixture,我正在逐步了解基本知识(据我所见,还有更多的东西),但是我有一个问题,而且我不能百分之百地确定这样的事情的最佳实践是什么。

我正在测试一个控制器,部分过程是操作可以返回两个视图中的一个。

  • 如果一个类别有子类别-显示类别列表视图
  • 如果类别没有子类别,则显示产品列表视图。

因此,我正在考虑对这种行为进行一些测试,但是返回的夹具数据将是不同的。一个会返回一个0的计数,另一个更大的计数然后零,所以我想让夹具帮助我。

我一直在寻找,也许我必须创建某种定制,但我希望基本的API可以帮助我在这里。我试过这个:

代码语言:javascript
复制
var category = _fixture.Build<Category>()
    .Do(x => x.SubCategories = _fixture.CreateMany<Category>(3).ToList())
    .Create();

_fakeCategoryService
    .Setup(x => x.GetById(id))
    .Returns(category);

这会编译和测试运行(并且失败),但是子类别的计数总是为0,所以我认为我在do中创建许多的调用都是错误的(它看起来有点错误,但我仍然不确定应该用什么替换它)。

更新:应该更好地阅读备忘单!

代码语言:javascript
复制
var category = _fixture.Build<Category>()
    .With(x => x.SubCategories, _fixture.CreateMany<Category>(3).ToList())
    .Create();

如果有更好的方法,请告诉我。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-10 17:43:55

是的,Build是对的。

如果要自定义 Category的创建算法,请使用Build

代码语言:javascript
复制
var actual = fixture
    .Build<Category>()
    .With(x => x.SubCategories, 
        fixture.CreateMany<Category>().ToList())
    .Create();

Assert.NotEmpty(actual.SubCategories);

如果要自定义的创建算法,则所有 Category实例都使用Customize

代码语言:javascript
复制
fixture.Customize<Category>(c => c
    .With(x => x.SubCategories,
        fixture.CreateMany<Category>().ToList()));

var actual = fixture.Create<Category>();

Assert.NotEmpty(actual.SubCategories);
票数 8
EN

Stack Overflow用户

发布于 2014-04-10 18:03:58

希望基本的API能帮到我

如果您知道如何倾听:) AutoFixture最初是作为测试驱动开发( TDD )工具构建的,而TDD完全是关于反馈的。本着古斯的精神,您应该听您的测试。在本例中,它的意思与框架设计指南相同

不要提供可设置的集合属性。

与其将列表批发地分配给属性,不如考虑

  • 使集合属性只读,并让客户端调用Add等.
  • 将集合作为构造函数参数,而不是更改属性。

在后一种情况下,AutoFixture将在调用构造函数时自动提供一个填充的集合,尽管在这种情况下,由于您有一个潜在的递归图,所以可能需要显式处理

在第一种情况下,AutoFixture不会做任何事情,但是有一个AddManyTo扩展方法,使您能够在一个语句中填充一个集合:

代码语言:javascript
复制
fixture.AddManyTo(category.SubCategories);
票数 7
EN

Stack Overflow用户

发布于 2019-09-17 14:48:13

您可以使用自定义列表来执行此存根:

代码语言:javascript
复制
var stub = _fixture.Build<Entity>().With(x=> x.field, config).CreateMany().ToList();

文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22993145

复制
相关文章

相似问题

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