В настоящее время я пытаюсь создать юнит-тест для переопределения, которое я сделал, но юнит-тестирование кажется немного сложнее, чем я ожидал ..
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 в этом тесте, но если я хочу вызватьследующий, я не должен запускать первый, который я не могу сделать.
Что делать?