首页 > 解决方案 > 自动夹具以及如何使用它们

问题描述

我目前正在使用 autofixtures 进行单元测试。

我有这个类媒体

我想用随机值创建,有人告诉我这可以使用 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:找不到配置节点:数据库/数据库[@id='databaseName2df4ec17-4d66-41bf-aa2f-75ed1ddd266a']

我只是想生成一个有效的媒体项目 media.MediaData.MediaItem.InnerItem;

如何使用 autofixture 制作一个,而不是继续陷入兔子洞?

标签: c#sitecoreautofixture

解决方案


您观察到的大多数问题的根源是 Sitecore 实现的非常广泛的ItemAPI。我建议您查看Sitecore.NSubstituteUtils库,该库使伪造项目变得更加容易。之后,您可以配置您的夹具以使用该库生成ItemDatabase实例化:

fixture.Inject(FakeUtil.FakeDatabase());
fixture.Register((Database db) => new FakeItem(database: db));
fixture.Register((FakeItem fakeItem) => fakeItem.ToSitecoreItem());

这应该可以解决问题。

作为奖励,您还将获得一个流畅的界面来配置各种项目方面(如字段、模板、演示文稿等)。


推荐阅读