Bagaimana cara menjalankan NUnit dalam mode debug dari Visual Studio?

120

Saya baru-baru ini membangun kerangka uji untuk sedikit C # yang sedang saya kerjakan. Saya telah menyiapkan NUnit dan proyek baru dalam ruang kerja saya untuk menguji komponen tersebut. Semua bekerja dengan baik jika saya memuat pengujian unit saya dari Nunit (v2.4), tetapi saya sampai pada titik di mana akan sangat berguna untuk menjalankan dalam mode debug dan mengatur beberapa titik istirahat.

Saya telah mencoba saran dari beberapa panduan yang semuanya menyarankan untuk mengubah properti 'Debug' dari proyek uji:

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

Saya menggunakan versi konsol di sana, tetapi telah mencoba memanggil GUI juga. Keduanya memberi saya kesalahan yang sama ketika saya mencoba dan memulai debugging:

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

Apakah ini karena saya biasanya memuat \ DSP.nunit ke GUI Nunit dan di sanalah tes diadakan?

Saya mulai berpikir masalahnya mungkin VS ingin menjalankan kerangka pengujiannya sendiri dan itulah mengapa gagal menemukan tes NUnit?

Sunting : Untuk mereka yang bertanya tentang perlengkapan uji, salah satu file .cs saya di proyek TestDSP terlihat kira-kira seperti ini:

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

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

... Saya cukup baru mengenal C # dan kerangka kerja uji NUnit sehingga sangat mungkin saya melewatkan beberapa informasi penting ;-)

Solusi Akhir : Masalah besarnya adalah proyek yang saya gunakan. Jika Anda memilih Other Languages -> Visual C# -> Test -> Test Project... saat Anda memilih jenis proyek, Visual Studio akan mencoba dan menggunakan kerangka pengujiannya sendiri sejauh yang saya tahu. Anda harus memilih proyek perpustakaan kelas C # normal sebagai gantinya dan kemudian instruksi dalam jawaban yang saya pilih akan berfungsi.

Jon Cage
sumber
Kelas perlengkapan tes Anda tampak baik-baik saja bagi saya, jadi itu pasti sesuatu dalam proyek seperti yang Anda sarankan.
Patrick McDonald
2
Lihat seperti pertanyaan ini: stackoverflow.com/questions/247900/… Jawabannya sama ...
Patrick Desjardins

Jawaban:

46

Saya menggunakan teknik yang sama seperti Anda mencoba Jon, tanpa flag / assembly, yaitu

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

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

Apakah TestDSP.dll berisi semua TestFixtures Anda?

Karena proyek pengujian saya bukanlah proyek startup dalam solusi, saya menjalankan pengujian dengan mengklik kanan proyek pengujian dan memilih Debug -> Mulai Instans Baru

Patrick McDonald
sumber
1
Saya sudah mencoba apa yang Anda sarankan (menghapus / assembly) tetapi tidak ada bedanya. Ketika saya memulai contoh baru, ini menghasilkan kesalahan. Saya pikir itu sebagian besar berkaitan dengan fakta bahwa ketika saya membuat proyek TestDSP saya membuatnya dari template proyek uji VisualStudio bawaan sehingga mencari kerangka pengujian yang salah.
Jon Cage
3
Akhirnya berhasil. Saya benar karena itu adalah opsi proyek yang menghentikannya - membuat ulang proyek uji menggunakan templat kelas standar memperbaiki masalah.
Jon Cage
1
Ini membantu jika Anda juga menambahkan /runargumen baris perintah * yang secara otomatis akan mulai menjalankan tes ... Saya juga telah menyimpulkan semuanya (menggunakan gambar) di posting blog saya .
Robert Koritnik
6
Jika orang tidak memeriksa entri blog Robert (sangat berguna) ( erraticdev.blogspot.com/2012/01/… ): untuk .NET 4.0 dan yang lebih baru, saya yakin Anda juga harus menambahkan ini ke nunit.exe.config : <startup> <supportRuntime version = "4.0" /> </startup>.
devuxer
3
Tindak lanjut: Di versi NUnit yang lebih baru (versi terbaru saat ini adalah v2.6.1), Anda perlu memberi komentar <supportedRuntime version="v2.0.50727" />di nunit.exe.config.
devuxer
102

Ketika saya perlu men-debug tes NUnit saya, saya cukup melampirkan ke aplikasi NUnit GUI nunit-agent.exemenggunakan "Debug | Attach to Process" dan menjalankan tes dari GUI. Setiap breakpoint dalam pengujian saya (atau kode yang mereka uji) terkena. Apakah saya salah memahami pertanyaan Anda, atau akankah itu berhasil untuk Anda?

Matt Hamilton
sumber
7
Untuk informasi Anda (dan orang lain): Debug | Lampirkan tidak tersedia di edisi Ekspres VS.
Richard
15
Ketahuilah bahwa Anda harus memilih "Aktifkan Dukungan Visual Studio" pada dialog Pengaturan NUnit -> Dukungan IDE
Julio Garcia
8
NET 4.0 dan kemudian, saya percaya Anda juga harus menambahkan ini ke nunit.exe.config: <startup> <supportedRuntime version="4.0" /> </startup>.
devuxer
1
Ini adalah pintasan cepat untuk melampirkan ke proses yang benar (jalankan di Package Manager Console): ($ dte.Debugger.LocalProcesses |? {$ _. Name.EndsWith ("nunit-agent.exe")}). Attach ()
bart
7
FYI: Anda perlu melampirkan debugging ke proses yang disebut "nunit-agent.exe" dan BUKAN "nunit.exe". Jika tidak, breakpoint Anda akan diabaikan dan Anda bertanya-tanya mengapa ...
Jenny O'Reilly
21

Cukup hapus garis yang terlihat seperti itu

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

dari file proyek Anda. Baris ini pada dasarnya memberi tahu VS.Net bahwa ini adalah proyek Uji, sehingga "Tidak dapat memulai proyek uji". FYI di sini Panduan pertama mengatakan "ini ujian", Panduan kedua mengatakan "ini C #". Untuk informasi tentang Panduan tersebut: http://www.mztools.com/Articles/2008/MZ2008017.aspx

pengguna276648
sumber
18

Selain jawaban yang diberikan oleh @Justin, berikut adalah beberapa detail lainnya untuk NUnit 2.6.

Menggunakan NUnit 2.6 melampirkan ke nunit.exe atau nunit-console.exe dan BUKAN agen. Konfigurasi yang dicatat oleh @Justin sedikit berbeda. Di bawah ini adalah contoh dari nunit.exe.config (sama untuk nunit-console.exe.config).

<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>

Untuk proyek pengujian .NET 4, untuk mendapatkan break point, Anda harus memberi komentar atau menghapus baris v2.0 seperti yang disarankan oleh komentar. Setelah saya melakukannya, saya dapat men-debug proyek uji .NET 4.0.

dblood.dll
sumber
Saya berhasil dengan hanya v2.0.50727baris saat debugging .NET 2 rakitan dari VS2005 dengan nunit. ( v4Garis itu mencegah debugger VS 2005 untuk melampirkan.)
Martin Ba
17

Jika Anda menggunakan NUnit 2.4 atau yang lebih baru, Anda dapat meletakkan kode berikut di SetUpFixturekelas Anda . (Anda dapat melakukan ini dengan versi yang lebih lama tetapi Anda perlu melakukan apa pun yang setara dengan itu SetUpFixture, atau menyalinnya ke pengujian itu sendiri.)

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

Apa Debugger.Launch()yang menyebabkan dialog berikut muncul saat Anda mengklik Jalankan di dalam NUnit.

JIT Debugger Dialog

Anda kemudian memilih contoh studio visual yang sedang berjalan dengan proyek Anda terbuka (yang ke-2 di tangkapan layar saya) kemudian debugger akan dilampirkan dan setiap titik putus atau pengecualian akan muncul di Visual Studio.

Scott Chamberlain
sumber
12

Di Nunit 3.0.1 (Saya menggunakan VS2013), Buka dari menu utama> Test> Windows> Test Explorer. Kemudian di "Penjelajah pengujian", klik kanan kasus pengujian, Anda mungkin melihat: masukkan deskripsi gambar di sini

Semoga ini membantu.

Quinn
sumber
2
Terima kasih atas jawaban ini. Jauh lebih sederhana dari yang lainnya.
dano
Saya menggunakan NUnit 2.5.9 di VS 2015 dan bekerja dengan ekstensi VS bernama 'NUnit 2 Test Adapter'. Anda dapat menjalankan pengujian di jendela Test Explorer.
mggSoft
6

Instal TestDriven.NET , yang merupakan plugin untuk Visual Studio

Dari sana Anda dapat mengklik kanan pada unit test assembly Anda dan klik Run Tests untuk menjalankan seluruh rangkaian, klik kanan pada kelas TestFixture untuk menjalankan hanya pengujian di kelas itu, atau klik kanan pada metode Test untuk menjalankan metode itu saja.

Anda juga memiliki opsi untuk Menguji Dengan Debugger, jika Anda perlu breakpoint ke pengujian Anda dalam mode debug.

Jon Limjap
sumber
2
$ 170 sangat mahal untuk alat semacam itu. Harga mencongkel, siapa?
Ben Hardy
Ya. Untuk uang sebanyak itu, saya lebih suka berinvestasi di JetBrains Resharper yang kemudian memberikan Test Runner secara gratis dengan integrasi debugging dan banyak fitur produktivitas lainnya.
Roman
Dengan Visual Studio 2012 Anda bisa mendapatkan NUnit Test Runner dengan Nuget secara gratis.
Jon Limjap
6

Coba NUnit - sumber terbuka Visual Studio Addin untuk Debugging kasus NUnit Test

Halaman Rumah - http://nunitit.codeplex.com/

abhilash
sumber
Itu cukup bagus meskipun saya tidak dapat menemukan cara untuk mengatakannya hanya dengan menjalankan satu tes (?)
Jon Cage
3

Sekarang dengan gambar:

  1. Jalankan NUnit gui ( Unduh 2.6.2 dari sini ) lalu bukaFile -> Open Project

masukkan deskripsi gambar di sini

  1. Pilih pengujian Anda .dlldari folder bin ( C:\......\[SolutionFolder][ProjectFolder]\bin\Debug\xxxxTests.dll)

  2. Pergi ke Visual Studio Debug -> Attach to process(jendela Attach to process akan terbuka)

  3. Dari daftar gulir ke bawah dan pilih nunit-agent.exelalu klikAttach

masukkan deskripsi gambar di sini

  1. Pada titik ini, titik henti dalam pengujian Anda harus berubah menjadi merah matang (dari cekungan).

  2. Klik Rundi Nunit Guidan Anda harus mendapatkan breakpoint hit Anda ...

Semoga ini menghemat waktu Anda.

Matas Vaitkevicius
sumber
2

Jika Anda bisa mendapatkan konsol / atau GUI yang berfungsi, tetapi breakpoint Anda tidak terkena, itu mungkin karena aplikasi Anda menjalankan runtime .NET yang berbeda dari NUnit. Periksa untuk melihat apakah nunit-console.exe.config / nunit.exe.config Anda memiliki runtime yang ditentukan. (Konfigurasi tinggal di direktori yang sama dengan exe nunit.) Tentukan runtime menggunakan node startup:

<configuration>
    <startup>
       <supportedRuntime version="4.0" />
    </startup>
Justin Turner
sumber
2

Jika jalur proyek berisi spasi misalnya "Proyek Baru" di jalur, <path>\bin\Debug\New Project\Quotes.Domain.Tests.dlltutupi Jalur Proyek Opsi Mulai -> Argumen Baris Perintah dalam tanda kutip ganda.

Saya menghabiskan banyak waktu untuk memikirkan hal ini.

Gyan Sada
sumber
1

Mengenai apa yang Mr Patrick McDonald mengatakan

Karena proyek pengujian saya bukanlah proyek startup dalam solusi, saya menjalankan pengujian dengan mengklik kanan proyek pengujian dan memilih Debug -> Mulai Instans Baru

Saya mencoba untuk mendaftar ke perpustakaan kelas pengujian saya tetapi mendapat beberapa kesalahan terkait jalur, jadi saya mencoba untuk menghapus 'Argumen Baris Perintah', dan untungnya itu bekerja dengan baik dan seperti yang diharapkan.

Abdul Rahman Kayali
sumber
0

Sepertinya Anda mencoba menggunakan perpustakaan yang salah. NUnit hanya dapat dijalankan jika dll yang Anda gunakan berisi TestFixtures.

+1 di TestDriven.Net. Saya memiliki kesempatan untuk menggunakannya beberapa kali. Anda dapat mengunduh versi pribadi untuk tujuan evaluasi sesuai dengan lisensi di http://testdriven.net/purchase_licenses.aspx .

Mike737
sumber
Lihat hasil edit terbaru - Saya memiliki perlengkapan uji meskipun sangat mungkin saya tidak mengaturnya dengan benar.
Jon Cage
0

Saya mendapat kesalahan yang sama dengan MSTest. Saya menemukan bahwa di jendela Test Output , beberapa tes memiliki ID duplikat dan tidak dapat dimuat. Saya menghapus semua tes duplikat dan sekarang saya dapat menjalankan tes ketika saya memulai proyek.

Vijay
sumber
0

Ada juga ekstensi sekarang "Visual NUnit" yang akan memungkinkan Anda untuk menjalankan tes dari dalam Visual studio seperti build in test framework menangani. Lihat itu di pengelola ekstensi.

iamkrillin.dll
sumber
0

Buka Visual Studio ---> Proyek Anda ---> Pilih 'Properties' ---> Pilih 'Debug' -> Pilih 'Mulai program eksternal' dan atur jalur NUnit Anda di sana (Misalnya: Mulai program eksternal = C : \ Program Files \ NUnit 2.6.2 \ bin \ nunit.exe) ----> Simpan

Setelah mengatur ini cukup klik Debug

Farija Khan
sumber
0

Bagi saya solusinya adalah mengadaptasi file konfigurasi nunit. Untuk menggunakan nunit dengan kerangka 4.5-.Net dan opsi build x64, saya harus menambahkan satu baris ke tag startup (mendukung versi runtime).

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

Setelah itu, saya bisa mulai dengan klik kanan pada Testproject Debug -> Start new instance. Sebelumnya, saya perlu melampirkan lagi proyek secara manual ke proses.

Properti Debug saya adalah, C: \ Program Files (x86) \ NUnit 2.6.4 \ bin \ nunit.exe dengan argumen lokasi .dll yang akan diuji.

Informasi selengkapnya: nunit untuk pengujian dengan .NET 4.0

HauiB
sumber
-1

Lihat apakah ini membantu .. Bagaimana menambahkan NUnit di Visual Studio

(RighteousRant) Meskipun secara pribadi saya tidak suka pendekatan ini .. Jika Anda memerlukan debugger saat menguji kode Anda, itu adalah "bau" karena Anda tidak memiliki cukup keyakinan / tahu cara kerja kode & membutuhkan debugger untuk memberitahumu itu. TDD seharusnya membebaskan Anda dari kebutuhan debugger jika dilakukan dengan benar. Gunakan 'Lampirkan debugger ke NUNit' hanya untuk kasus yang jarang terjadi atau saat Anda mengarungi kode orang lain.

Gishu
sumber
Saya mencoba saran di sana tetapi tidak berhasil. Anda jelas memiliki hidung yang bagus. Saya tahu kode saya tidak berfungsi karena output yang saya dapatkan untuk implementasi blok pertama mendapatkan jawaban yang sangat berbeda untuk referensi pengujian saya. Jadi sekarang saya mencoba menggali lebih dalam untuk menemukan penyebab masalah tersebut. Saya lebih suka melakukannya secara terpisah ke program lainnya (karena itu perlu menjalankan pengujian unit dalam mode debug). Sebagai catatan, ini adalah kode yang ditulis orang lain yang dikonversi dari algoritme orang lain: - /
Jon Cage
Jadi itu termasuk dalam klausa terakhir dari baris terakhir saya :) Aneh bahwa Anda tidak bisa membuatnya berfungsi .. sayang sekali. Saya akan mengatakan hanya melampirkan ke proses (Alt + D + P) tanpa memikirkannya ..
Gishu
Tidak ada bau di sini - Saya memiliki kasus uji yang gagal di lingkungan tertentu (hasil yang sangat salah dikembalikan), dan saya perlu mencari tahu alasannya. Untuk melakukan itu, saya ingin men-debugnya dan mencari tahu di mana kegagalannya di lingkungan ini sehingga saya dapat memperbaiki kode dan membuat tes lulus di mana-mana. Ini sepertinya seperti barang tipe merah / hijau standar ...
BrainSlugs83
@ BrainSlugs83 - sudah lama sejak saya menulis ini. Saya (masih) menentang debugging tes Anda sebagai praktik kerja utama. Kasus tepi - Saya baik-baik saja dengan beralih ke debugger. Bahkan kemudian saya mungkin akan memasukkan logging stmts terlebih dahulu .. Saya pikir itu berasal dari fakta bahwa saya telah mengamati terlalu banyak orang menggunakan siklus Code-Crash-Debug-Adjust yang disederhanakan ke siklus Code-Crash-Adjust dengan debugger terus menerus.
Gishu