Saya punya proyek uji di Visual Studio. Saya menggunakan Microsoft.VisualStudio.TestTools.UnitTesting .
Saya menambahkan baris ini di salah satu tes unit saya:
Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();
Ketika saya menjalankan tes, tes berlalu, tetapi jendela konsol tidak dibuka sama sekali.
Apakah ada cara untuk membuat jendela konsol tersedia untuk berinteraksi melalui uji unit?
c#
.net
visual-studio
unit-testing
console-application
kue pensil
sumber
sumber
Dump
metode ekstensi yang menampilkan konten objek ke konsol, membuat semuanya jauh lebih mudah untuk di-debug. i.imgur.com/MEZwy7X.pngJawaban:
CATATAN: Jawaban asli di bawah ini akan berfungsi untuk versi Visual Studio hingga Visual Studio 2012. Visual Studio 2013 tampaknya tidak memiliki jendela Hasil Uji lagi. Sebagai gantinya, jika Anda membutuhkan output khusus pengujian, Anda dapat menggunakan saran @ Stretch
Trace.Write()
untuk menuliskan output ke jendela Output.The
Console.Write
metode tidak menulis ke "konsol" - itu menulis untuk apa pun yang ketagihan hingga pegangan output standar untuk proses berjalan. Demikian pula,Console.Read
membaca input dari apa pun yang terhubung ke input standar.Ketika Anda menjalankan tes unit melalui Visual Studio 2010, output standar dialihkan oleh harness tes dan disimpan sebagai bagian dari output tes. Anda dapat melihat ini dengan mengklik kanan jendela Hasil Uji dan menambahkan kolom bernama "Output (StdOut)" ke layar. Ini akan menunjukkan apa pun yang ditulis ke output standar.
Anda bisa secara manual membuka jendela konsol, menggunakan P / Invoke seperti kata sinni800 . Dari membaca
AllocConsole
dokumentasi, tampak bahwa fungsi akan mengatur ulangstdin
danstdout
menangani untuk menunjuk ke jendela konsol baru. (Saya tidak 100% yakin tentang itu; tampaknya agak salah bagi saya jika saya sudah diarahkanstdout
untuk Windows untuk mencurinya dari saya, tetapi saya belum mencoba.)Namun secara umum, saya pikir itu ide yang buruk; jika semua yang Anda ingin gunakan untuk konsol adalah untuk membuang informasi lebih lanjut tentang pengujian unit Anda, hasilnya ada untuk Anda. Tetap menggunakan
Console.WriteLine
cara Anda, dan periksa hasil output di jendela Hasil Uji setelah selesai.sumber
AllocConsole
dokumentasi, saya mungkin salah, tetapi saya harus mengujinya.Seseorang berkomentar tentang fungsi yang tampaknya baru ini di Visual Studio 2013. Saya tidak yakin apa yang dia maksud pada awalnya, tetapi sekarang saya lakukan, saya pikir itu layak untuk jawabannya sendiri.
Kita dapat menggunakan Console.WriteLine secara normal dan output ditampilkan, hanya saja tidak di jendela Output, tetapi di jendela baru setelah kita klik "Output" pada detail pengujian.
sumber
Anda bisa menggunakan baris ini untuk menulis ke Window Output dari Visual Studio:
Harus dijalankan dalam mode Debug.
sumber
Seperti yang dinyatakan, unit test dirancang untuk berjalan tanpa interaksi.
Namun, Anda dapat men - debug unit test, sama seperti kode lainnya. Cara termudah adalah dengan menggunakan Debugtombol di tab Hasil Uji.
Mampu melakukan debug berarti bisa menggunakan breakpoints. Mampu menggunakan breakpoints, kemudian, berarti bisa menggunakan Tracepoints , yang menurut saya sangat berguna dalam debugging setiap hari.
Pada dasarnya, Tracepoints memungkinkan Anda menulis ke jendela Output (atau, lebih tepatnya, ke output standar). Secara opsional, Anda dapat terus menjalankan, atau Anda dapat berhenti seperti breakpoint biasa. Ini memberi Anda "fungsionalitas" yang Anda minta, tanpa perlu membangun kembali kode Anda, atau mengisinya dengan informasi debug.
Cukup tambahkan breakpoint, lalu klik kanan breakpoint itu. Pilih opsi "When Hit ...":
Yang memunculkan dialog:
Beberapa hal yang perlu diperhatikan:
Lihat dokumentasi untuk lebih jelasnya.
sumber
Ada beberapa cara untuk menulis output dari tes unit Visual Studio di C #:
Dikonfirmasi dalam Visual Studio 2013 Professional.
sumber
Kamu bisa memakai
untuk menulis ke jendela Output saat men-debug unit test.
sumber
Di Visual Studio 2017, "TestContext" tidak menampilkan tautan Output ke Test Explorer.
Namun, Trace.Writeline () menunjukkan tautan Keluaran.
sumber
Pertama-tama unit test, menurut desain , seharusnya berjalan sepenuhnya tanpa interaksi.
Dengan mengesampingkan itu, saya tidak berpikir ada kemungkinan yang dipikirkan.
Anda bisa mencoba meretas dengan P / Invoke AllocConsole yang akan membuka konsol bahkan ketika aplikasi Anda saat ini adalah aplikasi GUI. The
Console
kelas maka akan posting ke konsol sekarang dibuka.sumber
Debug.WriteLine () dapat digunakan juga.
sumber
IMHO, pesan keluaran hanya relevan untuk kasus pengujian yang gagal dalam kebanyakan kasus. Saya membuat format di bawah ini, dan Anda juga bisa membuatnya sendiri. Ini ditampilkan di Visual Studio Test Explorer Window itu sendiri.
Bagaimana kita bisa membuang pesan ini di Jendela Visual Studio Test Explorer?
Kode contoh seperti ini seharusnya berfungsi:
Anda dapat memiliki kelas terpisah yang didedikasikan untuk ini untuk Anda.
sumber
Saya punya solusi yang lebih mudah (yang saya gunakan sendiri baru-baru ini, untuk sejumlah alasan malas). Tambahkan metode ini ke kelas tempat Anda bekerja:
Kemudian ... buka direktori AdHocConsole, dan pesan berdasarkan waktu yang dibuat. Pastikan ketika Anda menambahkan 'pernyataan cetak' Anda. Mereka berbeda, kalau tidak akan ada juggling.
sumber
Visual Studio Untuk Mac
Tidak ada solusi lain yang bekerja pada Visual Studio untuk Mac
Jika Anda menggunakan NUnit , Anda dapat menambahkan
.NET
Proyek Konsol kecil ke solusi Anda, dan kemudian merujuk proyek yang ingin Anda uji dalam Referensi Proyek Konsol baru itu .Apa pun yang Anda lakukan dalam
[Test()]
metode Anda dapat dilakukan diMain
aplikasi konsol dengan cara ini:Anda bebas untuk menggunakan
Console.Write
danConsole.WriteLine
dalam kode Anda dalam keadaan ini.sumber