我刚刚开始使用AutoFixture,但我的基础知识有所下降(据我了解,它还有很多其他东西),但是我遇到了问题,我不确定100%像这样的事情的最佳实践。
我正在测试 Controller ,过程的一部分是操作可以返回两个 View 之一。
因此,我正在考虑对该行为进行一些测试,但是返回的灯具数据将有所不同。一个将返回一个计数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的创建多次调用完全错误(它看起来有些错误,但我仍然不确定应该是什么)替换为)。
更新:应该更好地阅读备忘单!
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 - 用自动治具填充治具的Collection属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22993145/