AutoFixtures以及如何使用它们

问题描述 投票:1回答:1

我目前正在使用自动混合进行单元测试。

我有这个类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;

怎么做一个使用自动混合,而不是继续沿着兔子洞?

c# sitecore autofixture
1个回答
0
投票

您观察到的大多数问题的根源是由Sitecore实施的非常广泛的Item API。我建议你看看Sitecore.NSubstituteUtils库,它使物品伪造更容易。之后,您可以配置夹具以使用库生成ItemDatabase实例:

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

这应该是一个技巧。

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

© www.soinside.com 2019 - 2024. All rights reserved.