gpt4 book ai didi

c# - 使用 Sitecore FakeDb 模拟 Sitecore 数据库

转载 作者:行者123 更新时间:2023-11-30 23:12:28 25 4
gpt4 key购买 nike

我目前正在对一些调用 sitecore 数据库的方法进行单元测试。该类具有 Sitecore 数据库的属性,并使用它来获取项目。我正在考虑使用 Sitecore FakeDb 来模拟这些项目。有没有一种方法可以让我使用 Sitecore FakeDb 来测试这些方法?

public class myClass
{
private Database myDb;

public string getMyItemValue()
{
var myItem = myDb.GetItem(SomeID);
string myItemValue = myItem["value"];

return myItemValue;
}
}

我还为这个类创建了一个构造函数

public myClass(myDatabase)
{
myDb = myDatabase;
}

现在在单元测试中我尝试使用 Sitecore FakeDB。我尝试使用从该链接 https://github.com/sergeyshushlyapin/Sitecore.FakeDb 获得的基本 FakeDb 信息.将 FakeDb 参数传递给类时代码中断,因为它不是数据库。顺便说一句,我正在使用 Xunit。

public class myClassTests
{
[Fact]
public void myItemValueTest()
{
using (var db = new Db
{
new DbItem("myItem") { { "value", "hello world!" } }
}){
myClass myclass = myClass(db); /*code breaks here*/

string myItemValue = myclass.getMyItemValue();
Assert.Equal("hello world!", myItemValue);
}
}
}

如有任何帮助,我们将不胜感激。

最佳答案

您应该区分 Sitecore Database 和 FakeDb Db 类。在生产装配中,您肯定需要第一个(而且只需要第一个)。 FakeDb Db 类仅用于单元测试目的。

在 Sitecore 8.2 之前,Sitecore.Data.Database 类是静态的,无法在单元测试中对其进行模拟。 using new Db() 语句允许以一种允许您使用标准 Sitecore API 创建和检索测试内容的方式配置内存中 数据提供程序。您应该始终记住,有两种 API。

在您的示例中,可以通过 db.Database 属性访问 Sitecore 数据库:

var database = db.Database;
myClass myclass = myClass(database);

从 Sitecore 8.2 开始,静态 Database 类已拆分为抽象 Database 和具体 DefaultDatabase 类。这使得数据库模拟没有 FakeDb。

关于c# - 使用 Sitecore FakeDb 模拟 Sitecore 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44106409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com