我刚刚开始使用AutoFixture,而且我已经掌握了基础知识(从我可以看到的还有更多内容)但我有一个问题,我不是100%确定这样的事情的最佳做法是什么.
我正在测试一个控制器,而部分进程是动作可以返回两个视图中的一个.
所以我正在考虑对该行为进行一些测试,但返回的夹具数据会有所不同.一个会返回一个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);
Run Code Online (Sandbox Code Playgroud)
这编译和测试运行(和失败),但子类别总是有0,所以我认为我在do中调用Create Many是完全错误的(它看起来有点不对,但我仍然不确定它应该是什么替换为).
更新:应该更好地阅读备忘单!
var category = _fixture.Build<Category>()
.With(x => x.SubCategories, _fixture.CreateMany<Category>(3).ToList())
.Create();
Run Code Online (Sandbox Code Playgroud)
这有效,如果有更好的方法请告诉我.
是的,Build
是对的.
如果要为一次性 Category
使用自定义创建算法Build
:
var actual = fixture
.Build<Category>()
.With(x => x.SubCategories,
fixture.CreateMany<Category>().ToList())
.Create();
Assert.NotEmpty(actual.SubCategories);
Run Code Online (Sandbox Code Playgroud)
如果要为所有 Category
实例自定义创建算法,请使用 Customize
:
fixture.Customize<Category>(c => c
.With(x => x.SubCategories,
fixture.CreateMany<Category>().ToList()));
var actual = fixture.Create<Category>();
Assert.NotEmpty(actual.SubCategories);
Run Code Online (Sandbox Code Playgroud)
我希望基本的API可以帮助我
如果您知道如何倾听,它确实对您有所帮助:) AutoFixture最初是作为测试驱动开发(TDD)的工具而构建的,而TDD则是关于反馈的.本着GOOS的精神,你应该听听你的测试.在这种情况下,它与框架设计指南的说法相同:
考虑,不是将列表批发分配给属性
Add
,等等.在后一种情况下,AutoFixture将在调用构造函数时自动提供填充的集合,尽管在此特定情况下,由于您具有可能的递归图形,因此您可能需要显式处理它.
在第一种情况下,AutoFixture不会开箱即用,但有一个AddManyTo
扩展方法,使您可以在一个语句中填充集合:
fixture.AddManyTo(category.SubCategories);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2697 次 |
最近记录: |