Visual Studio 2013 birim testlerini keşfetmiyor


147

Visual Studio 2013'te bir web projesi, bir kütüphane projesi ve bir ünite test projesinden oluşan basit bir çözümüm var. Çözümü açıp birim testlerini çalıştırmaya çalıştığımda görsel stüdyo tarafından keşfedilmiyorlar. Testleri çalıştırmak için menüye gidip Test -> Çalıştır -> Tüm testleri çalıştır seçeneğini seçiyorum veya test gezgini penceresini açıyorum. Yöntemlere göre visual studio çözümde herhangi bir test keşfetmez.

Önce basit bir birim testleri projesi oluşturup testi çalıştırmayı deneyin, visual studio testi keşfetmeyi bilir ve ben de çalıştırabilirim. Ardından önceki çözümümü açarsam görsel stüdyomu şimdi tüm testleri keşfediyor. Çözümümü kaydetmeye çalışıyorum ama kapatıp yeniden açıyorum, önce bir birim test projesi oluşturmadan, görsel stüdyo testleri bir daha bulamıyor. Bu çok tuhaf bir davranış, bunun neden olduğunu bilmiyorum.

Görsel stüdyo ekip vakfı ile entegre bir şekilde kaynak kontrolü kullanan bu projede tek başıma çalışıyordum. Görsel stüdyonun keşfetmeme sorunu, birim testlerini projeye yeni bir öğe geldiğinde ve çevrimiçi kaynak kontrolü ile çözümü yeniden oluşturmam gerektiğinde başlar. Bundan önce, tüm testler her zaman görsel stüdyo tarafından keşfedildi.

Birim testleri oluşturmak için Microsoft.VisualStudio.QualityTools.UnitTestFramework dll'sini kullanıyorum. Visual Studio sürümüm: Microsoft Visual Studio Express 2013 for Web Sürümü 12.0.30723.00 Güncelleme 3. .net framework sürümüm 4.5.50938.

Bütün testlerim şöyle:

[TestClass] 
public class Service1Test 
{ 
    [TestMethod] 
    public void Test1() 
    {
        Assert.IsTrue(True); 
    } 
}

2
Bunlar Async tabanlı Birim testleri mi?
Jamie Keeling

Sorunun ne olduğundan emin değilim, ancak yönetici olarak çalıştırmak benim için sorunu çözdü.
Sriram Sakthivel

Tüm senkronizasyon tabanlı birim testleri
miguelbgouveia

2
Harici bir test çalıştırıcısı (ReSharpers veya NCrunch gibi) denediniz mi? Belki yüklemeniz bozulmuştur (bu yüzden VS'yi yeniden yükleyin)
Carsten

1
Bunların hiçbiri benim için sorunu çözmedi :( Ne felaket. NUnit'i bıraktım ve UnitTestFramework'a güveniyorum - tuhaf bir şekilde OP'nin tam tersi problem
Adam

Yanıtlar:


210

Zaman zaman testlerin düzgün görünmesi için yapmam gerektiğini fark ettiğim bazı şeyler.

  1. Çözümünüz, okuma / yazma için yönetici erişimine ihtiyacınız olan korumalı bir sürücüdeyse, bazen testlerin yalnızca bir kısmı ortaya çıkar. Bu durumda kesinlikle VS'yi yönetici olarak çalıştırın.

  2. Çözümünüz 64 bit ise, Test> Test Ayarları> Varsayılan İşlemci Mimarisinin x64 olarak ayarlandığından emin olun. Bazen x86 olarak ayarlanır. X64 olarak ayarlayın, ardından yeniden oluşturun.

  3. Bazen, test gezgini yeniden başlayacağı için Visual Studio'yu yeniden başlatmak işe yarar.

  4. Test projesini / çözümünü gerçekten oluşturmayı unutmayın. (Projelerin geri kalanıyla oluşturulmasını istiyorsanız, çözümünüze sağ tıklayın> Özellikler> Yapılandırma Özellikleri> Yapılandırma> test projeniz için "Oluştur" kutusunu işaretleyin)

  5. Testlerin publictest sınıfınızın bir bölümünde olduğundan emin olun


34
Bu cevabın biraz geç olduğunun farkındayım, ancak Google aramam beni buraya getirdi ve bahsedilen hiçbir şey sorunumu çözmedi. Sonunda listemde 2 numara olduğunu anladım, bu yüzden bu bilgiyi ve zamanla aldığım diğer püf noktalarını bırakmak istedim.
AndyG

7
# 2 ve # 3 kombinasyonu benim için yaptı. Visual Studio, çözümümdeki bir dizi (test dışı) projenin, x86 için oluşturuldukları için test keşif adımının dışında bırakıldığından şikayet etti, ancak bu iyi oldu.
Nate Barbettini

4
Ayarlarımın doğru olduğunu ve yeniden başlatmanın işe yaramadığını buldum. Problemi benim için çözen şey basitçe çözümü oluşturmaktı. Bunun aptalca görünebileceğini biliyorum ama gerekli olduğu açık değil; Resmi belgelerin hiçbirinin bu adımdan bahsettiğini görmedim.
user1807768

6
VS2015'te de aynı sorunu yaşadım. # 2 benim için sorunu çözdü.
mcolegro

2
İnsanların neden bu kadar sık ​​başarısız olan bir ürün için bu kadar çok para ödediğini bilmiyorum. Projemi 2015'e yükseltmem ve testimi keşfetmeden önce 2 kez # 3 yapmak zorunda kaldım.
Matthew Hoggan

81

NUnit kullanıyorsanız, önce NUnit Adaptörünü indirdiğinizden emin olun.

Araçlar → Uzantılar ve Güncellemeler… → Çevrimiçi seçeneğine gidin → "NUnit Test Adaptörü" arayın.


2
Microsoft'tan UnitTests kullanıyorum. Bu durumda sanırım bu gerekli bir şey yüklemeyin.
miguelbgouveia

1
Bu benim için yaptı - çok minnettarım.
Matas Vaitkevicius

Bu benim için sorunumu çözdü. Teşekkürler.
jjthebig1

Sorunu çözdüğü gibi oy verildi, ancak NUnit bağdaştırıcısına sahip olmak veya Visual Stdio'nun kullanıma hazır NUnit ile çalışması gerekir.
Owain Glyndŵr

Siz bir tanrısınız efendim.
Nox

61

Test sınıfınızın publicbulunabilecek şekilde olduğundan emin olun . Ve başka bir sınıfa atıfta bulunuyorsanız, aynısından emin olun.

Ayrıca, bazen hiçbir İddianız yoksa veya testi bir ile dekore etmiyorsanız, test [TestMethod]tanınmayabilir.

2 şey daha: 1) Async birim testleri en iyi ihtimalle komik davranır ve en kötü ihtimalle hiçbiri. Göz at bu makalede tarafından Stephen Cleary ve sizi ilgilendiren eğer oradan tutun.

2) NUnit kullanırsanız ve aynı sorunlarla karşılaşırsanız [TestCase], bunun Nunit yerine Nunit için olduğunu unutmayın .[TestMethod]

Yukarıdakileri söyledikten sonra, burada kod projesinde yayınladığım bir makale var , eğer onu bir döndürmek ve hiçbir şeyi kaçırmadığınızdan emin olmak istemeniz durumunda hem MSTest& NUnit.


1
Tüm testlerim şu şekildedir: [TestClass] public class ServicesUtilsTest {[TestMethod] public void Test1 () {Assert.IsTrue (True); }}
miguelbgouveia

bu çok net değil. Anlaşılabilmesi için sorunuza bir kod bloğu koyun :)
Noctis

Tüm testlerim senkronizasyon kodu içindir ve sanırım sorunum birim test kodunda değil, daha çok görsel stüdyoda bazen testleri keşfetmeme.
miguelbgouveia

Bunun yerine şunu kullanmayı deneyin:using Microsoft.VisualStudio.TestTools.UnitTesting;
Noctis

1
Zaten Microsoft.VisualStudio.TestTools.UnitTesting kullanıyorum. Bu ad alanı Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
miguelbgouveia adlı dll'de

28

Aynı sorunu yaşadım ama diğer çözümlerin hiçbiri işe yaramadı. NUnit 3 çerçevesini 2 adaptörle kullandığım ortaya çıktı.

NUnit 3 kullanıyorsanız, Uzantılar ve Güncellemeler'e gidin ve NUnit3 Test Adaptörünü yükleyin.


Bunu Nuget paketinin açıklamasında söylüyor. Ama benim gibiyseniz ve okumuyorsanız, bunun yardımcı olacağını umuyorum: "Bu paket, testleriniz tarafından referans verilen NUnit 3.0 çerçeve derlemesini içerir. Nunit'in 3.0 sürümünü yüklemeniz gerekecek- konsol programı veya testleri yürütmek için NUnit 3.0'ı destekleyen üçüncü taraf bir çalıştırıcı. NUnit 2.x ile kullanılması amaçlanan çalıştırıcılar 3.0 testlerini doğru şekilde çalıştırmayacaktır. "
Frank

Benim durumumda, bunun NUnit3 güncellemesiyle bir ilgisi olduğunu biliyordum, ancak testimin bir seti geçti ve diğerleri görülmedi. Daha yakından incelendiğinde, testlerin tümü başarılı olsa da çıktıda birçok istisna vardı.
Rich Shealer

Bu benim için de böyleydi. NUnit 2.x'ten 3.x'e güncellendiğini fark etmeden nuget "update-package" çalıştırdım.
Jens

Şu anda NUnit 3.0 Test Bağdaştırıcısı NuGet aracılığıyla bulunamıyor (bkz. NUnit 3.0 Wiki ). Yine de bir uzantı olarak kurulabilir.
vauhochzett

1
Çok teşekkürler Frank. Sorunumu çözdü. Şimdi konsol penceresinde birim test sonuçlarını görebiliyorum :)
santosh kumar patro

12

Zaman zaman bu sorunu yaşıyorum. Benim için işe yarayan şey, Visual Studio'yu kapatmak ve klasöre gitmek:

%LocalAppData%\Microsoft\VisualStudio\12.0\ComponentModelCache

ve içeriğini silin.

Visual Studio'yu açtıktan ve projenizi tekrar yükledikten sonra Test Gezgini, testlerinizi geri içermelidir


Benim için bu işe yaramıyor. Son zamanlarda güncelleme 5 yüklemesiyle Visual Studio 2013 Express kullanıyorum. Hala görünmeyen birim testleri yok.
miguelbgouveia

Bu aynı zamanda benim için ne işçiydi. Visual stüdyosunu yeniden başlatmadan bile çalıştı. Kanalizasyondaki saatler sonunda sona erdi.
Stephan Ryer

Bu dizin artık VS2017'de mevcut değil.
Noel Widmer

Teşekkürler benim için çalışıyor, bu klasörün benim için olduğu gibi görsel stüdyonun kurulumuna bağlı olarak farklı bir sürümü olabilir%LocalAppData%\Microsoft\VisualStudio\16.0_03b7a93c\ComponentModelCache
Ravi Kumar Mistry

12

XUnit kullanıcıları, Test Gezgini penceresinin artık herhangi bir testi listelemediğini fark edebilir. Testleri yeniden keşfedilebilir hale getirmek için aşağıda vurgulanan bu önemli ipucunu deneyin .

Testleri keşfetmede veya çalıştırmada sorun yaşıyorsanız, Visual Studio içindeki bozuk bir çalıştırıcı önbelleğinin kurbanı olabilirsiniz. Bu önbelleği temizlemek için, Visual Studio'nun tüm örneklerini kapatın, ardından% TEMP% \ VisualStudioTestExplorerExtensions klasörünü silin. Ayrıca projenizin yalnızca Visual Studio çalıştırıcı NuGet paketinin (xunit.runner.visualstudio) tek bir sürümüne bağlı olduğundan emin olun.

Hedef klasörü bulmak için TEMP yazın


Bu benim için işe yaramadı. Test gezgini testimi bulamıyor ve bildiğim kadarıyla yanlış yapmıyorum ve burada bazı çözümleri denedim ve başarılı olamadım.
Skychan

MsTestV2'yi kullanmak - sorunu çözen tek şey buydu
Nathan

5

Gelecekteki Google çalışanları için buna neden olan nadir bir senaryom vardı.

Temel test sınıfımda TestContext adında bir özelliğim vardı. Bu, MSTest'in ayrılmış TestContext özelliğine müdahale etti ve biri hariç tüm testlerimin VS / Resharper'dan gizlenmesine neden oldu (tabandan miras almadı).


1
beni de anladım! test bağlam özelliğini yapmayı unuttum public.
escape-llc

4

benim için 'çözüm yapılandırmalarını' Hata Ayıkla (Sürüm yerine) olarak değiştiriyordu.


4

Benim sorunum, birim test yöntemimin geçersiz olmaması ve parametreleri almasıydı.


Her şeyden .... Bu benim sorunumdu ve parametreler biraz mantıklı. Sonuçta, test sistemi neyi geçeceğini bilirdi? Buradaki çözüm, test etmek istediğiniz yöntemi manuel olarak çağırdığınız bir test yöntemi yapmaktır. Bir WebAPI projesini test ediyorsanız ve Get with params varsa, yine de eşleşen Get çağrısına sahip olmanız gerekir, ancak bu, explorer'da görünmez.
MetalPhoenix

4

Olarak işaretlenmiş birim test yöntemlerinin async voidVS Test Gezgini tarafından keşfedilmediğini buldum . Bunun nedeni, VS'nin bir testin bitmesini beklemek ve başarılı olup olmadığına karar vermek için herhangi bir yolu olmamasıdır. Eşzamansız olarak çalıştırmak için kesinlikle bir test yöntemine ihtiyacınız varsa, bunun yerine bir Görev döndürmesini sağlayın async Task. Bunun benim için sorunu çözdüğünü buldum.


1
Bu, yukarıdaki soruyu yanıtlamıyor, ancak çözmeye çalıştığım sorun tam da bu. Yani +1 kazanın var :) Çok teşekkürler!
CF

3

Tüm projeleri x86 / x64 yerine MSIL (Herhangi bir CPU) olarak oluşturmayı deneyin. Garip bir şekilde benim için çalıştı


Herhangi bir CPU kullanarak Test projesini oluşturmak zorunda kaldım, diğer projeler x64 kaldı
Eduardo Brites

1
Teknik olarak, C # / VB.NET her zaman MSIL'e derlenir. Proje ayarı "x86", "x64" veya "Herhangi bir CPU" (ve daha yeni sürümlerde "32-bit'i tercih et"), EXE / DLL'nin üstündeki bayraklardır. Yine de nokta duruyor; NUnit, belirli bir mimarinin çalışması için işaretlenmesi nedeniyle yürütme motoruna yüklenemeyeceği testleri listelemez.
Jonathan Gilbert

3

AndyG'nin çözümü çalışırken, daha kalıcı bir çözüm, PreferredToolArchitecture ortam değişkenini "x64" olarak ayarlamak olabilir.

Visual Studio'nun yerel amd64 araç zincirini kullanmasını sağlama

veya tarafından:

  • Kontrol Paneli | Sistem ve Güvenlik | Sistem | Gelişmiş Sistem Ayarları | Ortam Değişkenleri
  • PreferredToolArchitecture = x64
  • DefaultToolArchitecture = Native64Bit
  • PROCESSOR_ARCHITECTURE = x64
  • ProcessorArchitecture = x64

2

Aynı problemle karşı karşıyaydım ve yine hatırladım (bu durum daha önce oldu), çözümler platformu menüsünde "Karma Platform" seçilmesinin diğer cevapların yanı sıra işe yaradığını da.


Peki çözüm platformu menüsü nerede? Bu Visual Studio'da mı? Web için Visual Studio Express 2013 kullanıyorum ve bu menüyü bulamıyorum.
miguelbgouveia

2

Benimkini eklemeyi başardım

public static void TestMethod1(){}

Statik kaldırdıktan sonra çalışmaya başladım ....


2

Nuget paket yöneticisine gidin ve aşağıdaki gibi Nunit Adapter'ı indirin. görüntü açıklamasını buraya girin


1

proje menüsü> Configuration Manager'a gidin, test projesi platformunuzun projenin geri kalanıyla eşleşip eşleşmediğini kontrol edin ve oluşturup yeniden oluşturmak için kontrol edin.


1
Proje menümde herhangi bir Configuration Manager seçeneğim yok. Sadece proje özellikleri seçeneğini bulabiliyorum. Ben birim testleri projesinin platformuyum ve diğer projeler ile aynı. Yani benim için bu çözüm işe yaramıyor.
miguelbgouveia

"Projesinin kalanını maçları" Define
amalgamı

1

Sadece bununla karşılaştım ve benimkine benzer benzer bir durum görmedim.

Gelen .csprojbenim test projesinin dosyasında, NUnit referans gizlilik olarak ayarlandı False:

<Reference Include="nunit.framework, Version=2.6.4.14350, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
  <HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
  <Private>False</Private>
</Reference>

Ayarladıktan <Private>sonra Trueişe yaradı.


1

Sadece bu paketi kurmanız yeterlidir:

NUnit TestAdapter NUnit TestAdapter


Başka bir birim test çerçevesi kullanmanın sorunumu çözeceğini biliyordum. Ancak devam etmek istersem, çözüm olmayan Microsoft Birim Testleri çerçevesini kullanmaya devam edeceğim.
miguelbgouveia


1

Aynı sorunu yaşadım.

Projeme (3.2.0) eklediğim NUnit'in uyumsuz sürümünden ve kurduğum Test Bağdaştırıcısından (2.0.0) kaynaklanıyordu.

Düzeltmek için "Araçlar> Uzantılar ve Güncellemeler" i kullanın ve NUnit3 Test Bağdaştırıcısını arayın, bundan sonra testlerimi keşfetti.

Şerefe


NUnit kullanmıyorum.
miguelbgouveia

1

Bağımlılıkların düzgün bir şekilde oluşturulması için (benim durumumda olduğu gibi) test projenizde X64 mimarisini kullanmanız gerektiğini tartışmak adına söyleyelim. Test - Test Ayarları menüsü altında Varsayılan İşlemci Mimarinizi değiştirmeniz gerekebilir . Bunu X64 olarak ayarlamak, test gezginimin Microsoft.VisualStudio.TestTools.UnitTesting kullanarak testlerimi bulmasına izin verdi.


1

Uzun listeye eklediğim için özür dilerim ama tamamen farklı bir sorun yaşadım. Öncelikle, Test Gezgini'nde 'Tümünü Çalıştır'ı tıklatıp ardından Visual Studio'da derleme çıktı penceresini izlerken sorunumu keşfettiğimi belirtmek isterim. Daha sonra mesaj kaybolacağı için aktif olarak izlemelisiniz.

Konuya gelince, testlerin taranması sırasında DLL yüklenir ve test türleri numaralandırılır gibi görünüyor. Bu, referansların yüklenmesine neden olur ve bu işlem sırasında herhangi bir arıza meydana gelirse, testler gezginde gösterilmez. Test DLL'sinin başarıyla yüklenmesini engelleyen iki sorun yaşadım:

  • Yapılandırma dosyasında hala bir bağlayıcı yeniden yönlendirme vardı (test projesinde referans verilenden daha düşük bir NHiberate sürümüne yeniden yönlendirme).
  • Çakışan bir montaj referansı (2. seviye referanslar yüklenemiyor). AsmSpy , bunları avlamak için harika bir araçtır.

Aynı sorunla karşılaşıyordum, hangi
dll'lerin

1

Bir ağ paylaşımından veya bir paylaşımın parçası olan Belgelerim dizininden bir Visual Studio (benim durumumda VS 2015 Topluluğu) çözümü yüklerseniz , bu sorunla karşılaşırsınız. Çözümü ve temelindeki projeleri yerel bir klasöre taşıyarak çözdüm.


1

2 gün geçirdikten sonra ... yukarıdakilerin hiçbiri benim için işe yaramadı. Tek "çözüm" şuydu: Proje özelliklerine gidin -> Oluştur Sekmesi. Ardından bölmenin sağ alt köşesindeki Gelişmiş düğmesine tıklayın. "Hata Ayıklama Bilgileri:" ni "tam" olarak değiştirin ve Tamam'ı tıklayın.

İşte ekran görüntüleri: görüntü açıklamasını buraya girin

görüntü açıklamasını buraya giringörüntü açıklamasını buraya girin


0

Ben de aynı sorunla karşılaştım. Ve araştırıldı ve dll'lerin oluşturulmadığını buldu ve doğru klasöre koydu. yapılandırmamı değiştirir değiştirmez göründü. - Projeler oluşturma seçenekleri, hangi klasör kullanılmalıdır? - yapı menüsü girişi yapı yapılandırması, kontrol edilmelidir.

Bu benim için sorunumu çözdü.


Benim için, görsel stüdyo tanımlanmış herhangi bir test bulamadığı için testler için dll'ler de inşa edilmedi. Visual Studio Express kullanıyorum ve Build menü girişine sahip değilim. Ancak yapılandırma yöneticimde tüm oluşturma seçeneklerini kontrol ettim. Yani, bence bu benim durumum için sorun değil.
miguelbgouveia

@miguelbgouveia, tam tersi - VS DLL'ler oluşturur ve ardından bunları testler için tarar. Bu nedenle, test projesi DLL'lerine sahip değilseniz, kesinlikle hiçbir test bulamazsınız.

0

Visual Studio 2013.5 için, çözümdeki \ TestResults dizinini temizlemek yardımcı oldu. Visual Studio, keşfedilen testleri sakladığı mdf dosyasını bozarak birim testlerinin keşfedilmesini engellemiştir.


1
Projenizin çözümünde. Çözüm Gezgini -> Dosya Gezgini'nde Klasörü Aç'da proje dosyanıza sağ tıklayın. Oradan bir dizin yukarı gidin ve / TestResults dizinini silin. Her şeyi silmek için Visual Studio'yu kapatmanız gerekebilir. Projenin bir sonraki açılışında dizini yeniden oluşturacaktır.
MartijnK

0

Tüm projelerinizin aynı konfigürasyonda çalıştığından emin olun. Projenizin Özellikleri => Hata Ayıkla => Açılır listede Platform altında, diğer projelerinizde belirlendiği gibi uygun platformu seçin (benim için "Herhangi bir CPU" idi).


0
  • Çözüm inşa edilmediyse birim testlerinin bulunamayacağını biliyorum, bu yüzden denenecek bir şeydir (Çözümü oluştur), ancak bu çözüm, bilgisayarınızın prize takılı olup olmadığını soran yardım masası gibidir ...
  • Temiz bir yeniden oluşturma sorunu benim için çözmedi, tam bir toplu derleme çalıştırmak sorunu çözdü.

0

Aynı sorunu yaşadım; testler aniden keşfedilmeyi bıraktı.

Nunit Test Adaptörü bir şekilde devre dışı bırakıldı. Uzantı yöneticisinde etkinleştir seçeneğine tıklamak benim için sorunu çözdü.


0

Kes / yapıştır hatası yaptığımı [Test Method]ve testten önce bıraktığımı fark edene kadar aynı sorunu yaşadım .


Bu zaten benim başıma geldi. Ama bunda durum böyle değil.
miguelbgouveia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.