0

我正在尝试在我的功能目录中配置一个单元测试项目,即

  • 特征
    • 活动
      • 示例项目
      • ExampleProject.UnitTest

执行

  • 在单元测试项目中:UnitTest.cs [TestMethod]
    {
      string val1= "Search";
      string val2= "en";
      string expectedVal = "xyz"; 

      string retVal = new Test.GetItem(val1, val2);
      Assert.AreEqual(expectedVal, retVal);
    }
  • 在实现类中
public string GetItem(str1, str2)
{
List<SearchResultItem> matches;

     --BREAKS HERE-- using (var context = ContentSearchManager.GetIndex("sitecore_web_index").CreateSearchContext()) 
      {
        var predicate = PredicateBuilder.True<SearchResultItem>();

        predicate = predicate.And(p => p.Path.StartsWith("/sitecore/system/Dictionary"));
        predicate = predicate.And(p => p.str1== str2);

        matches = context.GetQueryable<SearchResultItem>().Where(predicate).ToList();
      }
}

我相信我引用了所有必要的依赖项(Sitecore.Kernel、Sitecore.Mvc、Sitecore.ContentSearch),但我仍然收到错误:Could not find configuration node: contentSearch/configuration. 我有我的 Sitecore 站点的本地 IIS 实例,其中 GetItem(str1, str2) 被多次调用,所以不确定为什么单元测试项目无法正常运行。

版本

  • 站点核心 9.2
  • .NET 4.7.2

我是否仍然需要更改配置以允许单元测试?

任何帮助表示赞赏,谢谢。

4

1 回答 1

0

您面临的问题是由于在测试中消耗静态代码(又名hidden dependency)引起的contentSearchManager

您需要在代码中使用包装器来代理静态代码调用。在 Sitecore 9.3中使用Sitecore.Services.Infrastructure.Sitecore.Services.IContentSearchManagerWrapper了相同的方法。Sitecore.Services.Infrastructure.Sitecore.dll该实现仅调用Sitecore.Services.Infrastructure.Sitecore.Services.ContentSearchManagerWrapper.

您可以对代码进行逆向工程以查看实际的 impl。

另请查看展示如何对 Sitecore 进行单元测试的文章。

于 2020-01-21T08:13:03.137 回答