我目前正在测试一些调用sitecore数据库的方法。这个类有一个Sitecore数据库的属性,并使用它来获取项。我正在考虑使用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参数传递给类时,代码会中断,因为它不是数据库。顺便说一下我用的是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);
}
}
}任何帮助都将不胜感激。
发布于 2017-05-22 07:26:27
您应该区分Sitecore Database和FakeDb Db类。在生产程序集中,您肯定需要第一个程序集(而且只需要第一个程序集)。FakeDb Db类仅用于单元测试目的。
在Sitecore 8.2之前,Sitecore.Data.Database类是静态的,不可能在单元测试中模拟它。using new Db()语句允许对内存中的数据提供程序进行配置,使您能够使用标准的Sitecore来创建和检索测试内容。您应该始终记住,有两种API。
在您的示例中,可以通过db.Database属性访问Sitecore数据库:
var database = db.Database;
myClass myclass = myClass(database);从Sitecore 8.2开始,静态Database类被分成抽象的Database类和具体的DefaultDatabase类。它支持不使用FakeDb的数据库模拟。
https://stackoverflow.com/questions/44106409
复制相似问题