Провести тестирование объекта Sitecore, который сложно сделать с помощью fakeDb? - PullRequest
0 голосов
/ 03 января 2019

В настоящее время я пытаюсь создать юнит-тест для переопределения, которое я сделал, но юнит-тестирование кажется немного сложнее, чем я ожидал ..

public class Extension
{
    public fallback(HttpContext context)
    {
       return new HttpContext();
    }  

    public IEnumerable<SiteDefinition> RunOn => new[]
    {
       "Some", "Dome", "Gone"
    };

    public bool AllowedOnSite(string site)
    {
        bool allowed = RunOn.Any(sd => sd.Name == site);
        return allowed;
    }

    protected bool Process(HttpContext context)
    {
        var site = Context.Site.Name;
        if (Context.Domain.Name == "sitecore" || !AllowedOnSite(site))
        {
            return fallback(context);
        } 
     ....

    }

У меня, похоже, проблема с AllowedOnSite,Я могу выполнить его модульное тестирование отдельно, но не как часть og Process, что необходимо для модульного тестирования остальной части кода?

Как включить AllowedOnSite как всегда true, как часть unittest для Process?

Unittest:

    [Theory]
    [CustomAutoData("Gonw")]
    public void AllowedOnSite_IncorrectSite_ReturnFalse(string site)
    {
        //arrange
        var processor = new MediaRequestExtensions();

        //act
        processor.AllowedOnSite(site);

        //assert
        Assert.False(processor.AllowedOnSite(site));
    }

Это работает, как и ожидалось, ноЯ не знаю, как сделать это условие истинным, когда я, когда нужно протестировать метод Process?

[Theory]
[CustomAutoData("http://gonw.com","Gonw")]
public void Process_RequestURLIsIncorrect_Return(string url, string name)
{
    // Arrange
    var fakeSite = new Sitecore.FakeDb.Sites.FakeSiteContext(new Sitecore.Collections.StringDictionary
    {
        { "name", "Some" },
        { "b", "Dome" },
        { "c", "Gone" }
    });
    HttpRequest httpRequest = new HttpRequest(string.Empty, url, string.Empty);
    HttpResponse httpResponse = new HttpResponse(new StringWriter());
    HttpContext httpContext = new HttpContext(httpRequest, httpResponse);

    var processor = new MediaRequestExtensionsMock
    {
        GetHttpContextFunc = () => httpContext
    };
    using (new Db())
    {
        using (new Sitecore.Sites.SiteContextSwitcher(fakeSite))
        {
            Sitecore.Context.Site.Name = name;
            // Act
            processor.Process(httpContext);

            // Assert
            Assert.Equal(string.Empty, httpContext.Response.Output.ToString());
        }
    }
}

, я запускаю правильный оператор if в этом тесте, но если я хочу вызватьследующий, я не должен запускать первый, который я не могу сделать.

Что делать?

...