- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经创建了 ASP.NET Web API 的自托管实现,并希望它在 SpecFlow 测试中运行。
所以在我的规范中,我有一个启动 selfhostserver 的步骤:
var config = new HttpSelfHostConfiguration("http://localhost:9000");
var server = new HttpSelfHostServer(config);
_apiApplication.Start(); //IoC, route-configs etc.
server.OpenAsync().Wait();
var httpClient = new HttpClient();
var response = httpClient.GetAsync(fetchUrl).Result;
GetAsync 调用中发生的异常:
Exception : System.AggregateException: One or more errors occurred.
---> System.Net.Http.HttpRequestException: An error occurred while sending the request.
---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.
---> System.IO.IOException: Unable to read data from the transport connection
测试运行似乎阻止了在规范完成之前对自托管 API 的任何调用。调试时,我可以调用 url - 但它会挂起,直到测试运行完成。完成后,它给出了很好的响应。
我还创建了一个控制台应用程序,它可以完美地运行这段代码,并给出预期的结果。
有人拥有通过 HttpSelfHostServer 进行测试的 SpecFlow 测试套件,或者知道如何让自托管 WebApi 在 SpecFlow 套件中工作吗?
最佳答案
我已经设法为 WCF 服务而不是 Web 应用程序执行此操作,但理论上它应该是相同的。
一个大问题是释放服务器上的端口,因此我为每次运行分配了不同的端口,如下所示
private static int FreeTcpPort()
{
var l = new TcpListener(IPAddress.Loopback, 0);
l.Start();
int port = ((IPEndPoint)l.LocalEndpoint).Port;
l.Stop();
return port;
}
[Given(@"a WCF Endpoint")]
public void GivenAWCFEndpoint()
{
//The client
RemoteServerController.DefaultPort = FreeTcpPort();
//The server
var wcfListener = new ListenerServiceWCF
{
BindingMode = BindingMode.TCP,
Uri = new Uri(string.Format("net.tcp://localhost:{0}",
RemoteServerController.DefaultPort))
};
//The wrapped host is quite a bit of generic code in our common libraries
WrappedHostServices.Add(wcfListener);
WrappedHostServices.Start();
}
即便如此,我仍然会遇到偶尔的测试失败,因此,如果您可以减少运行代码的基础设施数量,那么我建议您在没有它的情况下运行大部分测试,只运行几个测试以确保它正常工作。
关于c# - Specflow 和 HttpSelfHostServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18211772/
我已经创建了 ASP.NET Web API 的自托管实现,并希望它在 SpecFlow 测试中运行。 所以在我的规范中,我有一个启动 selfhostserver 的步骤: var config =
我有一个派生自 ApiController 的简单类 TestController并处理 POST Http 请求。我还有一个 HttpSelfHostServer 的实例监听 http://loca
我正在开发一个自托管的 ASP.NET Web API 应用程序。一切正常,但现在我正在为 HttpContext 苦苦挣扎: 我需要保存来自客户端的 session 信息。但是 HttpContex
我们有一个使用 HttpSelfHostServer 的 Windows 服务,它大部分时间都在工作,但是,我们最近发现了一个错误,其中“长”网址总是被视为无效。 “好”网址的示例:http://lo
我有一个 MVC4 webapi Controller 。它没有无参数的构造函数。所以,我使用 Windsor 依赖解析器,在 System.Web.Http.WebHost 下工作时一切正常。但是,
我正在尝试为 Web API 项目做一些单元测试。我要模拟 Web API 托管环境。看来我可以使用内存主机 (HttpServer) 或自主机 (HttpSelfHostServer)。 只是想知道
我正在尝试使用 HttpSelfHostServer 自托管 ASP.NET MVC 4 WebAPI。一切都很好,我尝试添加自定义依赖解析器。 (最终这将使用 StructureMap,但我还没有达
我是一名优秀的程序员,十分优秀!