Ошибка модульного теста Sitecore 9.2: не удалось найти узел конфигурации: contentSearch / configuration

Я пытаюсь настроить проект модульного теста в моем каталоге функций, т.е.

  • Feature
    • Activity
      • ExampleProject
      • 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. У меня есть локальный экземпляр IIS моего сайта Sitecore, где GetItem (str1, str2) вызывается несколько раз, поэтому я не уверен, почему проект модульного теста не работает должным образом.

Версии

  • Sitecore 9.2
  • .NET 4.7.2

Мне все еще нужно вносить изменения в конфигурацию, чтобы разрешить модульное тестирование?

Любая помощь приветствуется, спасибо.


person LinkedListT    schedule 09.12.2019    source источник


Ответы (1)


Проблема, с которой вы столкнулись, вызвана использованием статического кода (также известного как hidden dependency) - contentSearchManager внутри теста.

Вам нужно будет использовать в своем коде оболочку, которая будет проксировать вызовы статического кода. Тот же подход используется в Sitecore.Services.Infrastructure.Sitecore.Services.IContentSearchManagerWrapper для Sitecore.Services.Infrastructure.Sitecore.dll в Sitecore 9.3. Реализация просто вызывает статический код в Sitecore.Services.Infrastructure.Sitecore.Services.ContentSearchManagerWrapper.

Вы можете перепроектировать код, чтобы увидеть реальный результат.

Также ознакомьтесь со статьей, в которой показано как выполнить модульное тестирование Sitecore < / а>.

person Community    schedule 21.01.2020