c# - 自动夹具以及如何使用它们
问题描述
我目前正在使用 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 制作一个,而不是继续陷入兔子洞?
解决方案
您观察到的大多数问题的根源是 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());
这应该可以解决问题。
作为奖励,您还将获得一个流畅的界面来配置各种项目方面(如字段、模板、演示文稿等)。
推荐阅读
- node.js - 在 ElectronJS (asar) 中编写 JSON 文件
- c++ - Makefile - 链接器输入文件未使用,因为链接未完成
- html - 用户使用邮政编码数据库输入邮政编码时自动填充状态|Django|JQuery|UI
- java - 如何在android上将Html从字符串加载到webview
- python - 在 Python 中使用加法在 Holoviews 中组合两种不同类型的图
- react-native - RNCamera 尺寸和样式
- react-native-android - 我们团队中有两台 Android 10 设备,它们都无法使用 react-native-ble-manager 检测到设备
- android - 如何在不点击的情况下在android中自动打开键盘
- coldfusion - 单击编辑按钮后如何仅显示选定的行?
- r - 如何在 R 中计算分类因变量(即“不多”、“一点”、“很多”)的回归?