Dalam Visual Studio 2010, saya memiliki sejumlah tes unit. Ketika saya menjalankan beberapa tes sekaligus menggunakan daftar tes, terkadang saya menemukan kesalahan berikut untuk satu atau lebih tes:
Proses agen dihentikan saat tes sedang berjalan.
Ini tidak pernah sama dengan tes yang gagal, dan jika saya mencoba menjalankan tes lagi, itu berhasil.
Saya menemukan laporan bug ini di Connect , yang tampaknya merupakan masalah yang sama, tetapi tidak menawarkan solusi.
Apakah ada orang lain yang pernah melihat perilaku ini? Bagaimana saya bisa menghindarinya?
Edit
Saya masih mengalami bug ini, begitu pula banyak rekan saya yang menggunakan perangkat lunak / perangkat keras yang sama. Saya telah mengevaluasi jawaban sejauh ini, tetapi mereka tidak menyelesaikan masalah. Saya memulai hadiah untuk solusi untuk masalah ini.
Jawaban:
Saya baru saja mengalami masalah yang sama: beberapa pengujian gagal dan berbeda dalam pengujian yang berbeda. Saya tidak tahu persis alasan mengapa itu terjadi, tetapi itu mulai terjadi ketika saya menambahkan finalizer ke salah satu kelas saya. Ketika saya menonaktifkan finalizer - masalah hilang. Ketika saya mengaktifkan finalizer - masalahnya kembali.
Saat ini saya tidak tahu bagaimana mengatasinya.
sumber
Pesan ini disebabkan oleh pengecualian pada utas yang berbeda dari utas percobaan yang sedang menjalankan . Semua jawaban sejauh ini bermuara pada penjelasan sederhana ini. Ini adalah bug yang diketahui dalam Visual Studio untuk tidak menampilkan informasi yang masuk akal dalam kasus itu.
Pelari pengujian Visual Studio benar-benar tersedak jika utas selain utas pengujian yang sedang dijalankan mengeluarkan pengecualian: Itu tertelan dan tidak ada output, tidak ada kesempatan untuk mencegat dan men-debug dan tidak ada apa-apa kecuali kekacauan membara yang terbakar yang seharusnya menjadi unit Anda uji.
sumber
async void
metode yang dipanggil selama pengujian melontarkan pengecualianSaya mengalami masalah ini, dan ternyata ada masalah dalam kode saya yang Kerangka Uji tidak menangkap dengan benar. Sedikit pemfaktoran ulang yang tidak disengaja telah meninggalkan saya dengan kode ini:
Ini tentu saja merupakan rekursi tak terbatas, dan menyebabkan StackOverflowException (saya kira). Penyebabnya adalah hal yang ditakuti: "Proses agen dihentikan saat pengujian sedang berjalan."
Pemeriksaan kode cepat menunjukkan masalahnya, dan pengujian saya sekarang berjalan dengan baik. Semoga ini bisa membantu - mungkin perlu memeriksa kode untuk mencari masalah, atau mungkin mengekstrak sedikit ke dalam aplikasi konsol dan memeriksanya berfungsi dengan baik di sana.
sumber
Saya dapat menemukan sumber masalah saya dengan melihat di file hasil pengujian (/TestResults/*.trx) Ini memberikan detail lengkap tentang pengecualian yang terjadi di utas latar belakang, dan setelah saya menyelesaikan pengecualian itu, "agen diproses berhenti ... "kesalahan hilang.
Dalam kasus saya, saya secara tidak sengaja meluncurkan GUI dalam pengujian unit saya, yang akhirnya menyebabkan System.ComponentModel.InvalidAsynchronousStateException dilempar.
Jadi file .trx saya berisi:
Ini tidak memberikan informasi apa pun tentang tes apa yang menyebabkan kesalahan, tetapi itu menunjukkan kepada saya di mana pengecualian itu, yang sangat berguna.
sumber
Pesan ini biasanya dibuat ketika proses pengujian mengalami crash dan bisa terjadi ketika ada pengecualian yang tidak tertangani pada thread latar belakang, terjadi stack overflow, atau panggilan eksplisit ke
Process.GetCurrentProcess().Kill()
atauEnvironment.Exit
. Kemungkinan penyebab lainnya adalah pelanggaran akses dalam kode yang tidak dikelola.Sesuatu yang tidak disebutkan oleh siapa pun adalah bahwa mungkin ada informasi tambahan di log peristiwa. Biasanya Anda tidak akan mendapatkan banyak informasi tentang mengapa tes gagal dalam hasil, namun jika terjadi pengecualian yang tidak tertangani pada utas latar belakang, kerangka kerja pengujian menulis detail ke log kejadian Aplikasi dengan sumber VSTTExecution. Jika tidak ada informasi yang ditulis ke log peristiwa, kemungkinan besar itu adalah salah satu penyebab lain yang tercantum di atas.
sumber
Dalam kasus saya, solusinya diselesaikan dengan memeriksa Output Window .
Dalam kasus saya, saya memiliki FileSystemWatcher yang membuat kesalahan pada utas terpisah.
sumber
Saya mengalami Masalah yang sama dan menyelesaikannya saat Menghapus
Jadi saya cukup yakin, bahwa kesalahan ini terjadi saat pengujian atau metode Anda sedang diuji, menyebabkan proses eksekusi dihentikan.
sumber
Terima kasih telah memposting pertanyaan. Saya baru saja mengalami masalah ini dan menemukan penyebab yang mungkin Anda hadapi.
Selama pengaturan pengujian saya, saya membuat objek yang mengantrekan thread pekerja di kumpulan thread. Jika saya menjalankan debugging cukup cepat, kode saya lolos.
Jika utas pekerja dimulai dan memiliki kesalahan SEBELUM pengaturan pengujian selesai, maka saya mendapatkan hasil Dibatalkan tanpa alasan.
Jika utas pekerja dimulai dan memiliki kesalahan SETELAH pengujian dimulai, maka saya mendapatkan hasil dari: Kesalahan - Proses agen dihentikan saat pengujian sedang berjalan.
Penting untuk diperhatikan: ini adalah komponen yang saya gunakan selama beberapa pengujian saya. Jika framework pengujian menemukan terlalu banyak error ini, pengujian lainnya akan dibatalkan.
Semoga ini membantu
sumber
Saya menambahkan blok coba / tangkap ke descructor ~ ClassName () {} yang ditentukan dalam kelas apa pun yang terlibat dalam pengujian saya. Ini memperbaiki masalah saya.
sumber
Untuk mengetahui di mana pengecualian itu dilemparkan, klik hyperlink "Test Run Error" di sebelah ikon tanda seru di jendela Hasil Tes. Jendela dengan jejak tumpukan dibuka.
Ini sangat membantu untuk melacak kesalahan!
sumber
Saya memiliki masalah yang sama dan itu disebabkan oleh finalizer untuk sumber daya yang tidak dikelola (penulis file yang tidak dibuang dengan benar karena beberapa alasan).
Setelah membungkus kode finalizer dalam uji coba yang menelan pengecualian, masalah tersebut menghilang. Saya tidak merekomendasikan menelan pengecualian seperti itu, jadi jelas akan bijaksana untuk mencari tahu mengapa pengecualian itu terjadi sejak awal.
sumber
Saya mengalami hal ini pada kesempatan yang aneh, dan pelakunya hampir selalu ternyata threading.
Anehnya, semua pengujian akan bekerja dengan baik di mesin pengembangan, lalu gagal secara acak di server build.
Pada pemeriksaan lebih dekat ternyata meskipun tes terdaftar sebagai lulus pada kotak dev, ada pengecualian yang dilontarkan. Pengecualian diberikan pada utas terpisah yang tidak dianggap sebagai kesalahan.
Detail pengecualian sedang dicatat ke jejak pengujian, jadi kami dapat mengidentifikasi kode / pengujian mana yang perlu dimodifikasi.
Semoga ini bisa membantu seseorang.
sumber
Dalam kasus saya, saya memiliki beberapa unit tes untuk layanan WCF. Layanan WCF ini memulai 2 pengatur waktu.
Pengatur waktu tersebut menyebabkan efek samping.
-> Saya menonaktifkan timer ini secara default dan semuanya baik-baik saja!
BTW: Saya menggunakan WCFMock untuk memalsukan layanan WCF, jadi saya memiliki pengujian unit "nyata" di sekitar layanan WCF saya
sumber
Kesalahan ini juga disebabkan oleh Finalizer untuk saya.
Finalizer secara akurat memanggil beberapa kode DB yang tidak dipermainkan. Butuh beberapa saat untuk menemukannya karena itu bukan kelas yang saya tulis dan referensi ke sana terkubur cukup dalam beberapa kelas.
sumber
Saya telah mengalami masalah serupa di mana tes gagal di TestInitialize dan juga menjalankan kode dari ddl dari proyek saya yang lain. Saya mendapatkan pesan kesalahan seperti yang dijelaskan di atas dan jika saya mencoba untuk men-debug pengujian, pengujian akan dibatalkan tanpa detail pengecualian.
Saya menduga bahwa masalahnya mungkin bahwa dll dari proyek saya yang lain berasal dari proyek Visual Studio 2012 dan saya menjalankan tes saya dalam proyek VS2010, dan / atau mungkin versi dll UnitTestFramwork dari 2 proyek tidak cocok.
sumber
Masalahnya juga bisa dipicu oleh Exception atau Stackoverflow di Constructor of a TestClass.
sumber
Karena kesalahan ini dapat memiliki banyak penyebab berbeda, saya ingin menambahkan satu lagi untuk kelengkapan utas ini.
Jika semua pengujian Anda dibatalkan seperti yang dijelaskan oleh OP, penyebabnya mungkin konfigurasi project yang salah. Dalam kasus saya, kerangka target ditetapkan ke .NETFramework 3.5. Menyetelnya ke versi yang lebih tinggi melalui halaman properti proyek (tab Aplikasi ) menyelesaikan masalah.
sumber
Saya dapat menentukan apa yang menyebabkan masalah saya dengan melihat di Windows Logs > entri log aplikasi dalam Windows Event Viewer . Cari entri pada saat tes gagal. Saya memiliki entri Kesalahan yang mirip dengan di bawah ini:
Itu memang pengecualian referensi nol dalam metode yang dipanggil dari finalizer kelas.
sumber
Bagi siapa pun yang mengalami pertanyaan lama ini dan bertanya-tanya apa yang terlempar dari utas mereka, berikut tipnya. Menggunakan Task.Run (sebagai lawan, katakanlah, Thread.Start) akan melaporkan pengecualian utas anak jauh lebih andal. Singkatnya, alih-alih ini:
Melakukan hal ini:
Dan log kesalahan Anda seharusnya jauh lebih berguna.
sumber