Aspnetcore: Membuat UrlHelper dengan ActionContext() menghasilkan NullReferenceException

Dibuat pada 15 Jan 2019  ·  3Komentar  ·  Sumber: dotnet/aspnetcore

Jelaskan bugnya

Mencoba membuat URLHelper untuk tujuan pengujian dengan bantuan ActionContext() melempar NullReferenceException.

Untuk Mereproduksi

Langkah-langkah untuk mereproduksi perilaku:

  1. Buat solusi MVC core 2.2 kosong
  2. Buat Proyek uji xunit
  3. Instal NuGet Microsoft.AspNetCore.Mvc.Core 2.2.0
  4. Tulis dalam tes: var Url = new UrlHelper(new ActionContext());
  5. Jalankan tes

Perilaku yang diharapkan

Melempar Pesan: System.NullReferenceException : Referensi objek tidak disetel ke instance objek.

Konteks tambahan

Laporan bug juga dapat ditemukan di StackOverflow:
https://stackoverflow.com/questions/54199103/trying-to-test-a-controller-with-a-urlhelper

bug

By Design area-mvc

Semua 3 komentar

Apa yang terjadi di sini adalah bahwa UrlHelper mencoba mengakses properti RouteData dari ActionContext untuk memeriksa apakah ia memiliki nilai sehingga menyebabkan pengecualian. Untuk memperbaikinya, Anda dapat melakukan:

var url = new UrlHelper( new ActionContext{ RouteData = new RouteData() } );

Konstruktor spesifik itu didokumentasikan untuk digunakan untuk pengujian unit, lebih khusus lagi ketika ActionContext hanya perlu diteruskan, tetapi tidak digunakan oleh kode yang dikonsumsi. Menyiapkannya seperti yang disarankan @navelDirt akan menjadi cara yang harus dilakukan.

Lebih jauh, jika Anda bermaksud menguji unit jika sepotong kode menghasilkan url tertentu, Anda akan lebih berhasil menggunakan stub \ mock IUrlHelper . Jika Anda perlu memverifikasi hasil yang sebenarnya, saya sangat menyarankan untuk menulis tes integrasi

Terima kasih banyak @navelDirt dan @pranavkm.
Saya bingung karena di inti 1.1 itu berfungsi tanpa mengatur RouteData, tetapi beralih ke 2.2 itu macet. Itu sebabnya saya pikir itu bug ... maaf atas ketidaknyamanan ini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat