使用 Sitecore FakeDb 模拟 Sitecore 数据库
Mocking Sitecore Database using Sitecore FakeDb
我目前正在对一些调用 sitecore 数据库的方法进行单元测试。 class 具有 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;
}
}
我还为 class
创建了一个构造函数
public myClass(myDatabase)
{
myDb = myDatabase;
}
现在在单元测试中,我正在尝试使用 Sitecore FakeDB。我尝试使用从 link https://github.com/sergeyshushlyapin/Sitecore.FakeDb 中获得的基本 FakeDb 信息。将 FakeDb 参数传递给 class 时代码中断,因为它不是数据库。顺便说一句,我正在使用 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
classes。在生产装配中,您肯定需要第一个(而且只需要第一个)。 FakeDb Db
class 仅用于单元测试目的。
在 Sitecore 8.2 之前,Sitecore.Data.Database
class 是静态的,无法在单元测试中对其进行模拟。 using new Db()
语句允许以允许您使用标准 Sitecore API 创建和检索测试内容的方式配置 内存中 数据提供程序。您应该始终牢记有两种 API.
在您的示例中,可以通过 db.Database
属性:
访问 Sitecore 数据库
var database = db.Database;
myClass myclass = myClass(database);
从 Sitecore 8.2 开始,静态 Database
class 已拆分为抽象 Database
和具体 DefaultDatabase
classes。这使得数据库模拟 没有 FakeDb.
我目前正在对一些调用 sitecore 数据库的方法进行单元测试。 class 具有 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;
}
}
我还为 class
创建了一个构造函数public myClass(myDatabase)
{
myDb = myDatabase;
}
现在在单元测试中,我正在尝试使用 Sitecore FakeDB。我尝试使用从 link https://github.com/sergeyshushlyapin/Sitecore.FakeDb 中获得的基本 FakeDb 信息。将 FakeDb 参数传递给 class 时代码中断,因为它不是数据库。顺便说一句,我正在使用 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
classes。在生产装配中,您肯定需要第一个(而且只需要第一个)。 FakeDb Db
class 仅用于单元测试目的。
在 Sitecore 8.2 之前,Sitecore.Data.Database
class 是静态的,无法在单元测试中对其进行模拟。 using new Db()
语句允许以允许您使用标准 Sitecore API 创建和检索测试内容的方式配置 内存中 数据提供程序。您应该始终牢记有两种 API.
在您的示例中,可以通过 db.Database
属性:
var database = db.Database;
myClass myclass = myClass(database);
从 Sitecore 8.2 开始,静态 Database
class 已拆分为抽象 Database
和具体 DefaultDatabase
classes。这使得数据库模拟 没有 FakeDb.