Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 当解决方案还包含WinForms测试时,使用内存中宿主挂起的WebApi测试_Asp.net_Nunit_Asp.net Web Api - Fatal编程技术网

Asp.net 当解决方案还包含WinForms测试时,使用内存中宿主挂起的WebApi测试

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版本)。如果它被注释掉,

我有一个解决方案,它包含许多不同的项目,包括WinForms和WebApi(RC)。当前面的一个测试实例化一个派生自
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.;-)