首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Sitecore模拟Sitecore数据库

用Sitecore模拟Sitecore数据库
EN

Stack Overflow用户
提问于 2017-05-22 06:56:17
回答 1查看 1.9K关注 0票数 2

我目前正在测试一些调用sitecore数据库的方法。这个类有一个Sitecore数据库的属性,并使用它来获取项。我正在考虑使用Sitecore来模拟这些项目。有什么方法可以让我用FakeDb来测试这些方法吗?

代码语言:javascript
复制
public class myClass
{
    private Database myDb;

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

        return myItemValue;
    }
}

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

代码语言:javascript
复制
public myClass(myDatabase)
{
    myDb = myDatabase;
}

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

代码语言:javascript
复制
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);
        }
    }
}

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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数据库:

代码语言:javascript
复制
var database = db.Database;
myClass myclass = myClass(database);

从Sitecore 8.2开始,静态Database类被分成抽象的Database类和具体的DefaultDatabase类。它支持不使用FakeDb的数据库模拟。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44106409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档