mel*_*okb 7 .net c# multithreading unit-testing timeout
我有一组并行运行的单元测试(这很重要,如果测试是单线程运行的,它可以正常运行),这使得调用WebClient下载一直需要30秒才能返回的资源,这会导致单元使用以下两条消息之一进行测试以强制退出:
威胁已经被清除了.
已卸载运行该线程的应用程序域.
我已经尝试设置[Timeout]
属性,各种app.config
设置,甚至包括创建一个EventWaitHandle
使单元测试线程在WebClient线程上等待,没有运气.我检查了测试设置下的测试超时设置,并将其设置为默认值30分钟.
编辑2:
如@peer所示,这是VS.Net测试框架中的一个已知错误:http://connect.microsoft.com/VisualStudio/feedback/details/587390/threadabortexception-when-running-two-tests-in-parallel 酮-既能40秒
编辑:
这是最简单的方案,它将重现问题.你可以让这些单元测试运行完成,如果是,怎么样? 这些测试必须并行运行! 启动一个新的Visual Studio单元测试项目,并使用以下设置和测试方法代码.运行时,确保它们实际并行运行(即,您需要一个具有多个内核的处理器,并检查它们是否同时运行.我发现要让它们并行运行,我必须应用所有设置,然后关闭项目并再次重新打开它,然后才能应用并行化).
Local.testsettings(添加parallelTestCount="#"
,适用于您的处理器):
<Description>These are default test settings for a local test run.</Description>
<Deployment enabled="false" />
<Execution parallelTestCount="4">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
</AgentRule>
</Execution>
Run Code Online (Sandbox Code Playgroud)
TraceAndTestImpact.testsettings(注释掉DataCollectors
):
<Description>These are test settings for Trace and Test Impact.</Description>
<Execution parallelTestCount="0">
<TestTypeSpecific />
<AgentRule name="Execution Agents">
<!--<DataCollectors>
<DataCollector uri="datacollector://microsoft/SystemInfo/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo.SystemInfoDataCollector, Microsoft.VisualStudio.TestTools.DataCollection.SystemInfo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="System Information">
</DataCollector>
<DataCollector uri="datacollector://microsoft/HttpProxy/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.HttpProxyCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="ASP.NET Client Proxy for IntelliTrace and Test Impact">
</DataCollector>
<DataCollector uri="datacollector://microsoft/TestImpact/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TestImpactDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Test Impact">
</DataCollector>
<DataCollector uri="datacollector://microsoft/TraceDebugger/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TraceCollector.TraceDebuggerDataCollector, Microsoft.VisualStudio.TraceCollector, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="IntelliTrace">
</DataCollector>
</DataCollectors>-->
</AgentRule>
</Execution>
Run Code Online (Sandbox Code Playgroud)
UnitTest1.cs(第一次单元测试,休眠35秒):
[TestMethod]
public void TestMethod1()
{
Thread.Sleep(35000);
// in default unit test settings, this line will never be reached
Console.WriteLine("TestMethod1");
}
Run Code Online (Sandbox Code Playgroud)
UnitTest2.cs(第二次单元测试,睡35秒):
[TestMethod]
public void TestMethod2()
{
Thread.Sleep(35000);
// in default unit test settings, this line will never be reached
Console.WriteLine("TestMethod2");
}
Run Code Online (Sandbox Code Playgroud)
如果您正确设置了并行化,您将发现两个测试都将失败,其中a ThreadAbortException
,两个消息中的任何一个都显示在顶部.如何判断这些方法运行时间超过30秒?
您应该转到菜单:测试 -> 编辑测试设置 -> 当前测试配置
转到选项卡:测试超时
将超时更改为您喜欢的任何时间。
归档时间: |
|
查看次数: |
7604 次 |
最近记录: |