Asp.net 当解决方案还包含WinForms测试时,使用内存中宿主挂起的WebApi测试
我有一个解决方案,它包含许多不同的项目,包括WinForms和WebApi(RC)。当前面的一个测试实例化一个派生自Asp.net 当解决方案还包含WinForms测试时,使用内存中宿主挂起的WebApi测试,asp.net,nunit,asp.net-web-api,Asp.net,Nunit,Asp.net Web Api,我有一个解决方案,它包含许多不同的项目,包括WinForms和WebApi(RC)。当前面的一个测试实例化一个派生自System.Windows.Forms.Form的类时,我发现WebApi测试有一个问题挂起。您可以在此处找到一个示例解决方案来演示问题: 该解决方案已启用NuGet package restore,因此所有依赖项都应在生成时被删除 如果var form=newform1()调用Class1.cs不会被注释掉,那么测试将挂起(使用nunit的最新nuget版本)。如果它被注释掉,
System.Windows.Forms.Form
的类时,我发现WebApi测试有一个问题挂起。您可以在此处找到一个示例解决方案来演示问题:
该解决方案已启用NuGet package restore,因此所有依赖项都应在生成时被删除
如果var form=newform1()代码>调用Class1.cs不会被注释掉,那么测试将挂起(使用nunit的最新nuget版本)。如果它被注释掉,则测试通过
任何帮助都将不胜感激
Class1.cs
[TestFixture]
公共班级1
{
[测试]
公共无效AaaWindowsFormsApp(){
//如果未注释掉此行,BbbTestWebApiApp测试将挂起。
var form=new Form1();
}
[测试]
公共无效BbbTestWebApiApp(){
var config=新的HttpConfiguration();
var server=newhttpserver(配置,newmymessagehandler());
var client=新的HttpClient(服务器);
var request=newhttprequestmessage(HttpMethod.Get)http://localhost/");
var response=client.sendaync(request.Result);
AreEqual(HttpStatusCode.OK,response.StatusCode);
}
}
MyMessageHandler.cs
公共类MyMessageHandler:DelegatingHandler
{
受保护的覆盖任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken){
返回Task.Factory.StartNew(()=>request.CreateResponse(HttpStatusCode.OK));
}
}
更新
似乎将RequiresSTA
属性添加到System.Windows.Forms.Form
测试中可以解决这个问题
我不知道为什么在内存托管中添加WebApi会暴露问题
更新2
RequiresSTA
似乎只有在通过GUI运行测试时才有用。控制台运行程序似乎仍然挂起。这看起来确实像nUnit处理WinForms时的一个bug
我运行了您的解决方案并注意到:
如果将WebAPI和WinForms测试方法分离为
不同类别
如果在WebAPI测试方法之后运行WinForms测试方法,则该方法有效
这些测试在xUnit上运行得非常好
如果您可以接受这两种方式中的任何一种,我会这样做,而不必担心nUnit(也许我这么说是因为我在xUnit中完成了所有工作:)这看起来确实像nUnit处理WinForms时的一个bug
我运行了您的解决方案并注意到:
如果将WebAPI和WinForms测试方法分离为
不同类别
如果在WebAPI测试方法之后运行WinForms测试方法,则该方法有效
这些测试在xUnit上运行得非常好
如果您可以接受这两种方法中的任何一种,我会这样做,而不必担心nUnit(也许我这么说是因为我在xUnit中完成了所有工作:)#如果先执行WinForms测试类,那么1将无法工作。我可能能够为这种情况重新订购我们的测试组件,但这似乎是在开玩笑。我猜,除非我能成为一名真正优秀的推销员,否则我不太可能改用xUnit我发到了努尼特的邮件列表上。在我接受你的回答之前,我将等待结果。再次感谢!对不起,我帮不了你了-祝你好运。并考虑XUng.;-)如果先执行WinForms测试类,则1将不起作用。我可能能够为这种情况重新订购我们的测试组件,但这似乎是在开玩笑。我猜,除非我能成为一名真正优秀的推销员,否则我不太可能改用xUnit我发到了努尼特的邮件列表上。在我接受你的回答之前,我将等待结果。再次感谢!对不起,我帮不了你了-祝你好运。并考虑XUng.;-)