我有一个包含许多不同项目的解决方案,包括WinForms和WebApi(RC)。当先前的测试实例化一个派生自System.Windows.Forms.Form
的类时,我发现WebApi测试挂起的问题。您可以在此处找到演示此问题的示例解决方案:https://dl.dropbox.com/u/3688049/SampleSolutions/TestSolution.zip
该解决方案已启用NuGet包恢复,因此所有依赖项都应在构建时下拉。
如果未注释掉Class1.cs中的var form = new Form1();
调用,则测试将挂起(使用nunit的最新nuget版本)。如果它被注释掉,则测试通过。
非常感谢任何帮助。
的Class1.cs
[TestFixture]
public class Class1
{
[Test]
public void AaaWindowsFormsApp() {
// If this line is not commented out the BbbTestWebApiApp test will hang.
var form = new Form1();
}
[Test]
public void BbbTestWebApiApp() {
var config = new HttpConfiguration();
var server = new HttpServer(config, new MyMessageHandler());
var client = new HttpClient(server);
var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/");
var response = client.SendAsync(request).Result;
Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
}
}
MyMessageHandler.cs
public class MyMessageHandler: DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
return Task.Factory.StartNew(() => request.CreateResponse(HttpStatusCode.OK));
}
}
更新
似乎将RequiresSTA
属性添加到System.Windows.Forms.Form
测试可以解决问题。
我不确定为什么添加WebApi内存主机会暴露这个问题。
更新2
如果您通过GUI运行测试, RequiresSTA
似乎只会有所帮助。控制台运行器似乎仍然挂起。
答案 0 :(得分:1)
这看起来像nUnit处理WinForms的错误。
我运行了你的解决方案并注意到:
如果其中任何一个对你来说都是可以接受的,我会这样做而不用担心nUnit(也许我说的是因为我在xUnit中完成所有工作:))