NUnit'i Visual Studio'dan hata ayıklama modunda nasıl çalıştırırım?


120

Son zamanlarda üzerinde çalıştığım bir parça C # için bir test çerçevesi oluşturuyorum. Bileşeni test etmek için NUnit kurulumum ve çalışma alanımda yeni bir projem var. Birim testlerimi Nunit'ten (v2.4) yüklersem her şey iyi çalışıyor, ancak hata ayıklama modunda çalıştırmanın ve bazı kırılma noktaları belirlemenin gerçekten yararlı olacağı noktaya geldim.

Test projesinin 'Hata Ayıklama' özelliklerinin değiştirilmesini öneren birkaç kılavuzdaki önerileri denedim:

Start external program: C:\Program Files\NUnit 2.4.8\bin\nunit-console.exe
Command line arguments: /assembly: <full-path-to-solution>\TestDSP\bin\Debug\TestDSP.dll

Orada konsol sürümünü kullanıyorum, ancak GUI'yi aramayı da denedim. Her ikisi de hata ayıklamaya çalıştığımda bana aynı hatayı veriyor:

Cannot start test project 'TestDSP' because the project does not contain any tests.

Bunun nedeni normalde \ DSP.nunit'i Nunit GUI'ye yüklediğim ve testlerin yapıldığı yer mi?

Sorunun VS'nin kendi test çerçevesini çalıştırmak istemesi ve bu yüzden NUnit testlerini bulamamanın nedeni olabileceğini düşünmeye başladım.

Düzenleme : Test fikstürleri hakkında soru soranlar için, TestDSP projesindeki .cs dosyalarımdan biri kabaca şuna benziyor:

namespace Some.TestNamespace
{
    // Testing framework includes
    using NUnit.Framework;

    [TestFixture]
    public class FirFilterTest
    {
        [Test]
        public void Test01_ConstructorTest()
        {
            ...some tests...
        }
    }
}

... C # ve NUnit test çerçevesi konusunda oldukça yeniyim, bu yüzden tamamen mümkün, bazı önemli bilgileri kaçırdım ;-)

Nihai Çözüm : En büyük sorun, kullandığım projeydi. Seçerseniz Other Languages -> Visual C# -> Test -> Test Project... proje türünü seçerken, Visual Studio anlayabildiğim kadarıyla kendi test çerçevesini deneyecek ve kullanacaktır. Bunun yerine normal bir C # sınıf kitaplığı projesi seçmelisiniz ve sonra seçtiğim cevabımdaki talimatlar çalışacaktır.


Test fikstür sınıfınız bana iyi görünüyor, bu yüzden önerdiğiniz gibi projede bir şey olmalı.
Patrick McDonald

2
Şu soruya
benzeyin

Yanıtlar:


46

Jon'u denediğiniz tekniği / assembly bayrağı olmadan kullanıyorum.

Start External Program: C:\Program Files\NUnit 2.4.8\bin\nunit.exe

Command line arguments: "<path>\bin\Debug\Quotes.Domain.Tests.dll"

TestDSP.dll tüm TestFixtures'ınızı içeriyor mu?

Test projem çözümdeki başlangıç ​​projesi olmadığından, test projesine sağ tıklayıp Hata Ayıkla -> Yeni Örneği Başlat'ı seçerek testlerimi çalıştırıyorum.


1
Önerdiğiniz şeyi denedim (/ derlemesini kaldırarak) ama hiçbir fark yaratmıyor. Yeni örneği başlattığımda hata veriyor. Bunun çoğunlukla TestDSP projesini oluşturduğumda, onu yerleşik VisualStudio test projesi şablonundan oluşturduğum ve böylece yanlış test çerçevesini aradığı gerçeğiyle ilgilendiğini düşünüyorum.
Jon Cage

3
Sonunda işe yaradı. O kadar haklıydım ki onu durduran proje seçenekleriydi - standart sınıf şablonunu kullanarak test projesini yeniden oluşturmak sorunu çözdü.
Jon Cage

1
/runTestleri otomatik olarak yürütmeye başlayacak olan * Komut satırı argümanlarınıza da eklerseniz yardımcı olur ... Ayrıca hepsini blog yazımda (görüntüleri kullanarak) özetledim .
Robert Koritnik

6
İnsanların Robert'ın (çok yararlı) blog gönderisine ( erraticdev.blogspot.com/2012/01/… ) bakmaması durumunda : .NET 4.0 ve sonrası için, bunu nunit.exe.config dosyasına da eklemeniz gerektiğine inanıyorum. : <startup> <supportedRuntime version = "4.0" /> </startup>.
devuxer

3
Takip: NUnit'in sonraki sürümlerinde (bugün itibariyle en son sürüm v2.6.1'dir), nunit.exe.config dosyasında yorum yapmanız gerekir <supportedRuntime version="v2.0.50727" />.
devuxer

102

NUnit testlerimde hata ayıklamam gerektiğinde, nunit-agent.exe"Debug | Attach to Process" kullanarak NUnit GUI uygulamasına bağlanırım ve testleri GUI'den çalıştırırım. Testlerimdeki (veya test ettikleri koddaki) herhangi bir kesme noktasına ulaşıldı. Sorunuzu yanlış mı anlıyorum yoksa bu sizin için işe yarar mı?


7
Sizin (ve diğerlerinin) bilgileri için: Debug | Attach, VS'nin Express sürümlerinde mevcut değildir.
Richard

15
NUnit -> IDE Desteği
Julio Garcia

8
.NET 4.0 ve daha yeni sürümler, sana da nunit.exe.config bu eklemek zorunda inanıyoruz: <startup> <supportedRuntime version="4.0" /> </startup>.
devuxer

1
Bu, doğru işleme eklemek için hızlı bir kısayoldur (Paket Yöneticisi Konsolunda çalıştırın): ($ dte.Debugger.LocalProcesses |? {$ _. Name.EndsWith ("nunit-agent.exe")}). Attach ()
bart

7
Bilginize: Hata ayıklamayı "nunit-agent.exe" adlı işleme eklemeniz gerekir, "nunit.exe" DEĞİL. Aksi takdirde kırılma noktaları göz ardı edilir ve neden ... acaba
Jenny O'Reilly

21

Basitçe görünen satırı kaldırın

<ProjectTypeGuids>
    {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
</ProjectTypeGuids>

proje dosyanızdan. Bu satır temelde VS.Net'e bunun bir Test projesi olduğunu, dolayısıyla "Test projesi başlatılamıyor" bilgisini verir. FYI burada 1. Kılavuz "bu bir test" diyor, 2. Kılavuz "bu C #" diyor. Bu Kılavuzlar hakkında bilgi için: http://www.mztools.com/Articles/2008/MZ2008017.aspx


18

@ Justin tarafından sağlanan cevaba ek olarak burada NUnit 2.6 için daha fazla ayrıntı var.

NUnit 2.6'yı kullanarak nunit.exe veya nunit-console.exe'ye bağlanın, aracıyı DEĞİL. @ Justin tarafından not edilen konfigürasyon biraz farklıdır. Aşağıda nunit.exe.config dosyasından bir örnek bulunmaktadır (nunit-console.exe.config için aynıdır).

<startup useLegacyV2RuntimeActivationPolicy="true">
  <!-- Comment out the next line to force use of .NET 4.0 -->
  <supportedRuntime version="v2.0.50727" />  
  <supportedRuntime version="v4.0.30319" />
</startup>

.NET 4 test projesi için, vurulacak kırılma noktaları elde etmek için, yorumun önerdiği gibi v2.0 satırını yorumlamanız veya kaldırmanız gerekir. Bunu yaptıktan sonra .NET 4.0 test projesinde hata ayıklamayı başardım.


Nunit ile VS2005'ten v2.0.50727.NET 2 derlemelerinde hata ayıklarken yalnızca satırla başarılı oldum . ( v4Hat, VS 2005 hata ayıklayıcısının eklenmesini engelledi.)
Martin Ba

17

NUnit 2.4 veya daha yenisini kullanıyorsanız, aşağıdaki kodu SetUpFixturesınıfınıza koyabilirsiniz . (Bunu eski sürümlerle yapabilirsiniz, ancak bunun eşdeğerini yapmanız SetUpFixtureveya testin kendisine kopyalamanız gerekecektir.)

[SetUpFixture]
public class SetupFixtureClass
{
    [SetUp]
    public void StartTesting()
    {
        System.Diagnostics.Debugger.Launch();
    }
}

Ne Debugger.Launch()yapar Eğer NUnit içeride Çalıştır tıklayın onlara görünmek için aşağıdaki iletişim nedenidir.

JIT Hata Ayıklayıcı İletişim Kutusu

Ardından, projeniz açıkken (ekran görüntüsümdeki ikinci) çalışan görsel stüdyo örneğinizi seçersiniz, ardından hata ayıklayıcı eklenir ve tüm kesme noktaları veya istisnalar Visual Studio'da gösterilir.


12

Nunit 3.0.1'de (VS2013 kullanıyorum), Ana menüden aç> Test> Windows> Test Gezgini. Daha sonra, "Test gezgini" nde, test senaryosunu sağ tıklayın, şunu görebilirsiniz: görüntü açıklamasını buraya girin

Bu yardımcı olur umarım.


2
Bu cevap için teşekkürler. Diğerlerinden çok daha basit.
dano

VS 2015'te NUnit 2.5.9 kullanıyorum ve 'NUnit 2 Test Adapter' adlı bir VS uzantısıyla çalıştı. Testi Test Gezgini penceresinde gerçekleştirebilirsiniz.
mggSoft

6

Visual Studio için bir eklenti olan TestDriven.NET'i yükleyin

Buradan, birim test montajınıza sağ tıklayabilir ve tüm paketi çalıştırmak için Testleri Çalıştır'a tıklayabilir, yalnızca o sınıftaki testleri çalıştırmak için bir TestFixture sınıfına sağ tıklayabilir veya yalnızca bu yöntemi çalıştırmak için bir Test yöntemine sağ tıklayabilirsiniz.

Ayrıca, hata ayıklama modunda testlerinize kesme noktası oluşturmanız gerekiyorsa, Hata Ayıklayıcı ile Test Etme seçeneğiniz de vardır.


2
170 dolar, böyle bir alet için gülünç derecede yüksek. Fiyat oymak isteyen var mı?
Ben Hardy

Evet. Bu tür bir para için, JetBrains Resharper'a yatırım yapmayı tercih ederim, bu da daha sonra Test Runner'a hata ayıklama entegrasyonu ve bir dizi başka üretkenlik özelliği ile ücretsiz olarak verir.
Roma

Visual Studio 2012 ile NUnit Test Runner'ı Nuget ile ücretsiz olarak edinebilirsiniz.
Jon Limjap

6

NUnitit'i deneyin - NUnit Test durumlarında hata ayıklama için açık kaynaklı bir Visual Studio Eklentisi

Ana Sayfa - http://nunitit.codeplex.com/


Ben sadece tek bir test çalıştırmak için bunu söylemek için bir yol bulamıyorum rağmen oldukça iyi (?)
Jon Cage


3

Şimdi resimlerle:

  1. NUnit gui'yi çalıştırın ( 2.6.2'yi buradan indirin ) sonra şuraya gidin:File -> Open Project

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

  1. .dllBin klasöründen ( C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll) testinizi seçin

  2. Visual Studio'ya gidin Debug -> Attach to process(İşleme ekle penceresi açılacaktır)

  3. Listeden aşağı kaydırın ve seçin ve nunit-agent.exeardından tıklayınAttach

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

  1. Bu noktada, testlerinizdeki kesme noktaları olgun kırmızıya (içi boştan) dönmelidir.

  2. Click Runüzerinde Nunit Guive size kesme noktası isabet almalısınız ...

Umarım bu size biraz zaman kazandırır.


2

Konsolun / veya GUI'nin çalışmasını sağlayabiliyorsanız, ancak kesme noktalarınıza ulaşılmıyorsa, bunun nedeni uygulamanızın NUnit'ten farklı bir .NET çalışma zamanı çalıştırması olabilir. Nunit-console.exe.config / nunit.exe.config dosyanızın belirtilen çalışma zamanına sahip olup olmadığını kontrol edin. (Konfigürasyonlar, nunit exe ile aynı dizinde yaşar.) Başlangıç ​​düğümünü kullanarak çalışma zamanını belirtin:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>

2

Proje yolu boşluklar içeriyorsa, örneğin yolda "Yeni Proje" <path>\bin\Debug\New Project\Quotes.Domain.Tests.dllvarsa, Başlat Seçeneği -> Komut Satırı Değişkenleri proje yolunu çift tırnak içine alın.

Bunu anlamak için çok zaman harcadım.


1

Bay neyi İlişkin Patrick McDonald söyledi

Test projem çözümdeki başlangıç ​​projesi olmadığından, test projesine sağ tıklayıp Hata Ayıkla -> Yeni Örneği Başlat'ı seçerek testlerimi çalıştırıyorum.

Test sınıfı kitaplığıma başvurmaya çalıştım ancak yolla ilgili bazı hatalar aldım, bu yüzden 'Komut Satırı Argümanlarını' kaldırmaya çalıştım ve neyse ki iyi ve beklendiği gibi çalıştı.


0

Yanlış kitaplığı kullanmaya çalışıyorsunuz gibi görünüyor. NUnit, yalnızca kullandığınız dll TestFixtures içeriyorsa başlatılabilir.

TestDriven.Net'te +1. Birkaç kez kullanma şansım oldu. Kişisel sürümü, http://testdriven.net/purchase_licenses.aspx adresindeki lisansa göre değerlendirme amacıyla indirebilirsiniz .


Son düzenlemeye bakın - Tamamen mümkün olmasına rağmen bir test fikstürüne sahibim, bunu doğru bir şekilde ayarlamadım.
Jon Cage

0

MSTest ile aynı hatayı aldım. Test Çıktısı penceresinde bazı testlerin yinelenen kimliklere sahip olduğunu ve yüklenemediğini buldum . Yinelenen tüm testleri kaldırdım ve şimdi projeye başladığımda testleri çalıştırabildim.


0

Ayrıca artık "Visual NUnit" adlı bir uzantı da var ve bu, testleri Visual Studio'nun içinden test çerçevesi tanıtıcılarına çok benzer şekilde çalıştırmanıza izin veriyor. Uzantı yöneticisinde kontrol edin.


0

Visual Studio ---> Projeniz ---> "Özellikler" i seçin ---> "Hata Ayıkla" yı seçin -> "Harici programı başlat" ı seçin ve orada NUnit'inizin yolunu ayarlayın (Örn: Harici programı başlat = C : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) ----> Kaydet

Bunu ayarladıktan sonra Debug'ı tıklayın.


0

Benim için çözüm, nunit yapılandırma dosyasını uyarlamaktı. Nunit'i 4.5-.Net çerçevesi ve x64 yapı seçeneğiyle kullanmak için, başlangıç ​​etiketine bir satır eklemem gerekiyordu (desteklenen çalışma zamanı sürümü).

<startup useLegacyV2RuntimeActivationPolicy="true">
        <!-- Comment out the next line to force use of .NET 4.0 -->
        <supportedRuntime version="v4.0.30319" />
</startup>

Daha sonra, Testproject Debug -> Start new instance'a sağ tıklayarak başlayabilirim. Daha önce, projeyi sürece manuel olarak tekrar eklemem gerekiyordu.

Hata Ayıklama özelliklerim C: \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe idi ve test edilecek .dll'nin konumunun bağımsız değişkeni.

Daha fazla bilgi: .NET 4.0 ile test etmek için nunit


-1

Bunun yardımcı olup olmadığına bakın .. Visual Studio'da NUnit nasıl eklenir

(RighteousRant) Şahsen bu yaklaşımı sevmiyorum, ancak kodunuzu test ederken bir hata ayıklayıcıya ihtiyacınız varsa, bu bir "koku" dur, çünkü yeterince güvenmediğiniz / kodunuzun nasıl çalıştığını bildiğiniz ve size bunu söylemek için hata ayıklayıcı. TDD, doğru yapılırsa sizi bir hata ayıklayıcıya ihtiyaç duymaktan kurtaracaktır. 'Hata ayıklayıcıyı NUNit'e ekle' özelliğini yalnızca nadir durumlarda veya başka birinin kodunu girerken kullanın.


Oradaki önerileri boşuna denedim. Açıkça iyi bir burnun var. İlk uygulama bloğu için aldığım çıktı, test referansıma çılgınca farklı yanıtlar aldığından kodumun çalışmadığını biliyorum. Şimdi sorunun nedenini bulmak için daha derine inmeye çalışıyorum. Bunu programın geri kalanından ayrı yapmayı tercih ederim (bu nedenle hata ayıklama modunda birim testleri çalıştırma ihtiyacı doğar). Kayıt için, bu başka birinin yazdığı ve başka bir kişi algoritmasından dönüştürülen koddur: - /
Jon Cage

Bu, son satırımın ikinci maddesine giriyor :) Yine de çalışmasını sağlayamamanız garip .. çok kötü. Üzerinde
durmadan

Burada koku yok - bazı ortamlarda başarısız olan bir test durumum var (çok yanlış bir sonuç döndürülüyor) ve nedenini bulmam gerekiyor. Bunu yapmak için, hata ayıklamak ve bu ortamda nerede başarısız olduğunu bulmak istiyorum, böylece kodu düzeltebilir ve testin her yerde başarılı olmasını sağlayabilirim. Bu standart kırmızı / yeşil tip şeyler gibi görünüyor ...
BrainSlugs83

@ BrainSlugs83 - bunu yazmayalı uzun zaman oldu. Birincil çalışma uygulaması olarak testlerinizde hata ayıklamaya (hala) karşıyım. Uç durumlar - Hata ayıklayıcıya bırakmakta sorun yok. O zaman bile muhtemelen ilk önce günlük stmts eklerim .. Hata ayıklayıcı ile Kod-Çökme-Ayarlama döngüsüne uygun hale gelen bir Kod-Çökme-Hata Ayıklama-Ayarlama döngüsü kullanan çok fazla insan gözlemlememden kaynaklanıyor sanırım. sürekli açık.
Gishu
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.