У нас есть новый тестовый проект XUnit .NET Core 2.x, который тестирует решение с проектами .NET Framework 4.6.1.При вызове журнала ...
Log.Info(string.Format("Services - Begin...\nURL: {0} {1}\nREQUEST: {2}",postRequest.RequestUri, postRequest.subURL, postRequest.Body.BodyString), this);
... мы получаем исключение Sitecore ...
"The type initializer for 'Sitecore.DependencyInjection.DefaultSitecoreServicesConfigurator' threw an exception."
... с внутренним исключением, которое представляется сутьэтой проблемы.
{"Could not load type 'System.Web.HttpContextBase' from assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.":"System.Web.HttpContextBase"}
Глядя на это, я вижу, что единственный ответ, который я получаю, заключается в том, что System.Web.HttpContextBase находится в другой системной библиотеке между .NET Core и .NET Framework, но я мог быНе найти слишком много информации или как ее решить.Я не знаю, как заставить модульный тест использовать один или другой.
В настоящее время я не могу изменить проекты .NET Framework на .NET Core (мы реализуем эти тесты, чтобы мы могли это исправитьВ конце концов, все станет .NET Core, но сейчас мне нужно, чтобы этот проект тестирования .NET Core тестировал все библиотеки и приложения .NET Framework в решении. Если я удалю эту строку кода регистрации (чего мы не делаем))))))))))))))))))))))))))))))))))))))))))))))))))))))))) (»На самом деле». Что мне нужно добавить или изменить в моих модульных тестах xUnit .NET Core, чтобы пройти через эти операторы регистрации, которые не соответствуют нашему коду?
Для справки, вот мой примертест и некоторый вспомогательный код для контекста:
Hashtable servicesDelegatePaths = new Hashtable();
servicesDelegatePaths.Add("CheckChild", "web/do/CheckChildBelongsToParent/CheckChildBelongsToParent");
public void CheckChild_Success()
{
var restStatus = new RestStatus
{
Status = new JsonResponseStatus
{
code = 200,
desc = "Record Matched",
key = ""
},
Data = "This is the reply data"
};
SetupRalAndHttpClient(JsonConvert.SerializeObject(restStatus));
var response = ral.CheckChild("123456978", "Jim", "Smith", "1234", new DateTime(2010, 1, 1));
Assert.NotNull(response.Result);
Assert.NotNull(response.Result.Status);
Assert.Equal(200, response.Result.Status.code);
Assert.Equal("Record Matched", response.Result.Status.desc);
}
private void SetupRalAndHttpClient(string httpResponseMessageContentString)
{
var handlerMock = new Mock<HttpMessageHandler>(MockBehavior.Strict);
handlerMock
.Protected()
.Setup<Task<HttpResponseMessage>>("SendAsync", ItExpr.IsAny<HttpRequestMessage>(), ItExpr.IsAny<CancellationToken>())
.ReturnsAsync(new HttpResponseMessage()
{
StatusCode = HttpStatusCode.OK,
Content = new StringContent(httpResponseMessageContentString)
})
.Verifiable();
var httpClient = new HttpClient(handlerMock.Object);
ral = new RAL(domainURL, httpClient);
ral.DelegatePaths = servicesDelegatePaths;
}