我们有一个新的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;
}
答案 0 :(得分:0)
研究之后,我可以在.net framework 4.6.x中创建一个XUnit项目。它相对简单,但是作为参考,这里是一个链接。我不敢相信我以前没有看到过。
https://www.infoworld.com/article/3168787/how-to-work-with-xunit-net-framework.html
有了这个,我可以解决所有库问题,并且能够运行单元测试。
请注意,您不能直接从VS 2017和2019的“新建项目”菜单中直接创建XUnit项目。必须先创建一个类库,然后再添加所需的XUnit nuget包。