Ben Birimi bir dizi WebClient'a çağrıları bir kaynak indirmek için yapar (testler tek iş parçacıklı çalıştırılır eğer bu, gayet önemli çalışıyor ) paralel içinde çalıştırmak Testleri sahip Bu, tutarlı bir şekilde 30 saniyenin üzerine çıkar ve bu, Birim sınamasının aşağıdaki iki iletiden biriyle kuvvetle çıkmasına neden olur:VS UnitTest - iş parçacığı iptal edildi
İş parçacığı iptal edildi.
İş parçacığının çalıştığı uygulama etki alanı kaldırıldı.
Ben [Timeout]
niteliğinin kurulması denedi, hatta hiç şans ile, WebClient'tır parçacığı üzerinde birim test parçacığı beklemesi için bir EventWaitHandle
oluşturarak dahil olmak üzere çeşitli app.config
ayarları. Test Zaman Aşımları ayarlarını Test Ayarları altında kontrol ettim ve varsayılan 30 dakika olarak ayarlandı.
Düzenleme: İşte
olan @peer tarafından belirtildiği gibi
, bu VS.Net Testi Çerçevede bilinen bir hatadır Sorunu yeniden üretecek en basit senaryo. Bu Birim Testlerinin tamamlanmasını sağlar ve eğer öyleyse, nasıl? Bu testler paralel olarak çalıştırılmalıdır! Yeni bir Visual Studio Birim Sınama projesi başlatın ve aşağıdaki ayarları ve Test Yöntemi kodunu kullanın. Çalıştırdığınızda, aslında paralel olarak çalıştığından emin olun (yani, birden çok çekirdeğe sahip bir işlemciye ihtiyacınız olacak ve aynı anda çalıştıklarını kontrol etmeliyim. Paralel koşmaları için bunları almam gerektiğini öğrendim. ayarları, daha sonra projeyi kapatın ve paralelleştirme uygulanmadan önce tekrar açın.
Local.testsettings (sizin işlemci için geçerli olursa olsun, parallelTestCount="#"
ekleyin):
<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>
TraceAndTestImpact.testsettings (açýklama 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>
UnitTest1.cs (ilk ünite testi, 35 saniye uyur):
0 Doğru kurulum paralelliğini varsa[TestMethod]
public void TestMethod2()
{
Thread.Sleep(35000);
// in default unit test settings, this line will never be reached
Console.WriteLine("TestMethod2");
}
, her iki testler ile, bir ThreadAbortException
ile başarısız olacağını bulacaksınız:
[TestMethod]
public void TestMethod1()
{
Thread.Sleep(35000);
// in default unit test settings, this line will never be reached
Console.WriteLine("TestMethod1");
}
UnitTest2.cs (ikinci birim test, 35 saniye kişilik) Üstteki iki mesajdan biri. Bu yöntemleri 30 saniyeden daha uzun süre çalıştırmayı nasıl söyleyebilirim?
benim için çalışmak görünüyor
-Chris ... –
ben yapılacak doğru şey web hizmeti Mock için Rhino veya MOQ gibi alaycı bir çerçeve kullanmak olduğunu düşünüyorum. Bir Birim testinde W'leri aramak iyi bir uygulama değildir. – boca
@MikeGoatly: Bir parçayı kaçırdığımı anladım. Paralel yürütme yapana kadar benim için iyi çalışıyor, sonra hata mesajlarını alıyorum. – mellamokb