Как мне выполнить модульное тестирование класса, который зависит от HttpContext.Current и Sitecore.Context? - PullRequest
0 голосов
/ 13 ноября 2018

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

namespace Sandbox.Processors
{
    using Sitecore.Data.Items;
    using Sitecore.Pipelines.HttpRequest;
    using System;
    using System.Web;

    public class RobotsTxtProcessor : HttpRequestProcessor
    {
        public override void Process(HttpRequestArgs args)
        {
             HttpContext context = HttpContext.Current;

             if (context == null)
             {
                 return;
             }

             string requestUrl = context.Request.Url.ToString();

             if (string.IsNullOrEmpty(requestUrl) || !requestUrl.ToLower().EndsWith("robots.txt"))
             {
                 return;
             }

             string robotsTxtContent = @"User-agent: *"
                                       + Environment.NewLine +
                                       "Disallow: /sitecore";

             if (Sitecore.Context.Site != null && Sitecore.Context.Database != null)
             {
                  Item homeNode = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.StartPath);

                  if (homeNode != null)
                  {
                      if ((homeNode.Fields["Site Robots TXT"] != null) &&
                          (!string.IsNullOrEmpty(homeNode.Fields["Site Robots TXT"].Value)))
                      {
                          robotsTxtContent = homeNode.Fields["Site Robots TXT"].Value;
                      }
                  }
             }

             context.Response.ContentType = "text/plain";
             context.Response.Write(robotsTxtContent);
             context.Response.End();
         }
    }
}

Функция процесса довольно аккуратна, приятно разделена на операторы if, которые можно протестировать индивидуально, но проблема здесь в том, что функция ничего не возвращает, так что нечего ловить ...

Как мне создать модульный тест для такого рода функций?

1 Ответ

0 голосов
/ 13 ноября 2018

Вам необходимо создать фиктивный HTTPContext и вставить его в метод для теста.(Вам, вероятно, также нужно смоделировать немало других объектов, поскольку у метода есть несколько зависимостей.)

Затем, после запуска метода, подтвердите, что ответ в контексте соответствует желаемому.

Подробнее см. Здесь: Макет HttpContext.Current в методе инициализации теста

...