我目前正在使用自动混合进行单元测试。
我有这个类media
我想用随机值创建,我被告知这可以使用autofixtures完成 -
所以我尝试使用其公共构造函数即Media(MediaData mediaData),
因此:
MediaItem anonymousData = fixture.CreateAnonymous<MediaItem>();
Media media = new Media(new MediaData(anonymousData));
问题在于,即子项 - > media.MediaData.MediaItem.InnerItem;不会被设定。
然后我试图再次降低水平:因为MediaData有一个公共构造函数public MediaData(MediaItem [mediaItem][3])
我可以使用相反所以我试过这个
MediaItem anonymousData = fixture.CreateAnonymous<MediaItem>();
Media media = new Media(new MediaData(anonymousData));
但是这会产生错误:消息:System.InvalidOperationException:找不到配置节点:databases / database [@ id ='databaseName2df4ec17-4d66-41bf-aa2f-75ed1ddd266a']
我只是想生成一个有效的Media项,media.MediaData.MediaItem.InnerItem;
怎么做一个使用自动混合,而不是继续沿着兔子洞?
您观察到的大多数问题的根源是由Sitecore实施的非常广泛的Item
API。我建议你看看Sitecore.NSubstituteUtils库,它使物品伪造更容易。之后,您可以配置夹具以使用库生成Item
和Database
实例:
fixture.Inject(FakeUtil.FakeDatabase());
fixture.Register((Database db) => new FakeItem(database: db));
fixture.Register((FakeItem fakeItem) => fakeItem.ToSitecoreItem());
这应该是一个技巧。
作为奖励,您还将获得一个很好的流畅界面来配置各种项目方面(如字段,模板,演示文稿等)。