2017-08-04 117 views
1

我有一个ASP.Net核心1.1项目使用ServiceStack核心。我试图写一个基本的集成测试,看起来像这样:与ASPNetCore和ServiceStack集成测试

[TestFixture] 
public class BasicStartupTest 
{ 
    TestServer Server; 
    HttpClient Client; 
    const string BASE_URL = "http://localhost:57893"; 
    [OneTimeSetUp] 
    public void OneTimeSetup() 
    { 
     Server = new TestServer(new WebHostBuilder().UseStartup<Startup>()); 
     Client = Server.CreateClient(); 
    } 

    [OneTimeTearDown] 
    public void OneTimeTearDown() 
    { 
     Server.Dispose(); 
    } 

    [Test] 
    public async Task ShouldHitHealthEndpointAndReturn200() 
    { 
     var response = await Client.GetAsync("/health"); 
     response.EnsureSuccessStatusCode(); 
    } 
} 

问题是,当它试图从客户端运行实例的GetAsync功能,我碰到下面的堆栈跟踪:

Result StackTrace: at ServiceStack.Host.NetCore.NetCoreRequest.get_UserHostAddress() in C:\TeamCity\buildAgent\work\a61371dd01fad6bd\src\ServiceStack\Host\NetCore\NetCoreRequest.cs:line 215 
    at ServiceStack.HttpRequestExtensions.GetAttributes(IRequest request) in C:\TeamCity\buildAgent\work\a61371dd01fad6bd\src\ServiceStack\HttpRequestExtensions.cs:line 844 
    at ServiceStack.AppHostBase.ProcessRequest(HttpContext context, Func`1 next) in C:\TeamCity\buildAgent\work\a61371dd01fad6bd\src\ServiceStack\AppHostBase.NetCore.cs:line 113 
    at Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.<Invoke>d__3.MoveNext() 
--- End of stack trace from previous location where exception was thrown --- 

它继续,但是当我尝试在集成测试中调用端点时,它看起来像ServiceStack中的某个get_UserHostAddress函数存在问题。

如何解决此错误?

回答

1

将一个proper Integration Test与启用了真正的自主机HTTP服务器一起使用,对于.NET Core,AppSelfHostBase类可在ServiceStack.Kestrel NuGet包中使用。