我有一个包含许多不同项目的解决方案,其中包括 WinForms 和 WebApi (RC)。当先前的测试实例化派生自System.Windows.Forms.Form
. 您可以在此处找到演示问题的示例解决方案:https ://dl.dropbox.com/u/3688049/SampleSolutions/TestSolution.zip
该解决方案启用了 NuGet 包还原,因此所有依赖项都应在构建时被拉下。
如果var form = new Form1();
Class1.cs 中的调用没有被注释掉,那么测试将挂起(使用最新的 nuget 版本的 nunit)。如果它被注释掉,则测试通过。
任何帮助将不胜感激。
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
RequiresSTA
只有当您通过 GUI 运行测试时,它似乎才有帮助。控制台运行器似乎仍然挂起。