gpt4 book ai didi

autofixture - 使用自动夹具填充夹具的集合属性

转载 作者:行者123 更新时间:2023-12-04 16:39:41 24 4
gpt4 key购买 nike

我刚刚开始使用 AutoFixture,我正在了解基础知识(从我所看到的还有更多),但我遇到了一个问题,我不能 100% 确定对于此类事情的最佳实践是什么。

我正在测试一个 Controller ,该过程的一部分是操作可以返回两个 View 之一。

  • 如果类别有子项 - 显示类别 ListView
  • 如果一个类别没有子项显示产品 ListView

  • 所以我正在考虑对该行为进行一些测试,但返回的夹具数据会有所不同。一个会返回 0 的计数,另一个会返回比零更大的计数,所以我希望夹具能帮助我解决这个问题。

    我一直在环顾四周,也许我必须创建某种自定义,但希望基本 API 可以在这里帮助我。我试过这个:
    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 中调用 Create Many 是完全错误的(它看起来有点错误,但我仍然不确定它应该是什么替换为)。

    更新:应该更好地阅读备忘单!
    var category = _fixture.Build<Category>()
    .With(x => x.SubCategories, _fixture.CreateMany<Category>(3).ToList())
    .Create();

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

    最佳答案

    是的,Build是正确的。

    如果您想为 自定义创建算法单例 Category使用 Build :

    var actual = fixture
    .Build<Category>()
    .With(x => x.SubCategories,
    fixture.CreateMany<Category>().ToList())
    .Create();

    Assert.NotEmpty(actual.SubCategories);

    如果要为 自定义创建算法全部 Category实例使用 Customize :
    fixture.Customize<Category>(c => c
    .With(x => x.SubCategories,
    fixture.CreateMany<Category>().ToList()));

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

    Assert.NotEmpty(actual.SubCategories);

    关于autofixture - 使用自动夹具填充夹具的集合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22993145/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com