Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Stephen Walther
Pelajari cara membuat pengujian unit untuk tindakan pengontrol. Dalam tutorial ini, Stephen Walther menunjukkan cara menguji apakah tindakan pengontrol mengembalikan tampilan tertentu, mengembalikan kumpulan data tertentu, atau mengembalikan jenis hasil tindakan yang berbeda.
Tujuan dari tutorial ini adalah untuk menunjukkan bagaimana Anda dapat menulis pengujian unit untuk pengontrol di aplikasi MVC ASP.NET Anda. Kami membahas cara membangun tiga jenis pengujian unit yang berbeda. Anda mempelajari cara menguji tampilan yang dikembalikan oleh tindakan pengontrol, cara menguji Lihat Data yang dikembalikan oleh tindakan pengontrol, dan cara menguji apakah satu tindakan pengontrol mengarahkan Anda ke tindakan pengontrol kedua atau tidak.
Membuat Pengontrol di bawah Uji
Mari kita mulai dengan membuat pengontrol yang ingin kita uji. Pengontrol, bernama ProductController, terkandung dalam Daftar 1.
Daftar 1 – ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
Function Index()
' Add action logic here
Throw New NotImplementedException()
End Function
Function Details(ByVal Id As Integer)
Return View("Details")
End Function
End Class
ProductController berisi dua metode tindakan bernama Index() dan Details(). Kedua metode tindakan mengembalikan tampilan. Perhatikan bahwa Details() tindakan menerima parameter bernama Id.
Menguji Tampilan yang dikembalikan oleh Pengontrol
Bayangkan bahwa kita ingin menguji apakah menampilkan tampilan yang tepat atau tidak ProductController . Kami ingin memastikan bahwa ketika ProductController.Details() tindakan dipanggil, tampilan Detail dikembalikan. Kelas pengujian di Listing 2 berisi pengujian unit untuk menguji tampilan yang dikembalikan oleh ProductController.Details() tindakan.
Daftar 2 – ProductControllerTest.vb
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System.Web.Mvc
Imports Store
<TestClass()> Public Class ProductControllerTest
<TestMethod()> Public Sub TestDetailsView()
Dim controller As New ProductController()
Dim result As ViewResult = controller.Details(2)
Assert.AreEqual("Details", result.ViewName)
End Sub
End Class
Kelas di Listing 2 mencakup metode pengujian bernama TestDetailsView(). Metode ini berisi tiga baris kode. Baris pertama kode membuat instans ProductController baru kelas. Baris kedua kode memanggil metode tindakan pengontrol Details() . Terakhir, baris kode terakhir memeriksa apakah tampilan yang dikembalikan oleh Details() tindakan adalah tampilan Detail atau tidak.
Properti ViewResult.ViewName mewakili nama tampilan yang dikembalikan oleh pengontrol. Satu peringatan besar tentang menguji properti ini. Ada dua cara agar pengontrol dapat mengembalikan tampilan. Pengontrol dapat secara eksplisit mengembalikan tampilan seperti ini:
Function Details(ByVal Id As Integer)
Return View("Details")
End Function
Atau, nama tampilan dapat disimpulkan dari nama tindakan pengontrol seperti ini:
Function Details(ByVal Id As Integer)
Return View()
End Function
Tindakan pengontrol ini juga mengembalikan tampilan bernama Details. Namun, nama tampilan disimpulkan dari nama tindakan. Jika Anda ingin menguji nama tampilan, maka Anda harus secara eksplisit mengembalikan nama tampilan dari tindakan pengontrol.
Anda dapat menjalankan pengujian unit di Daftar 2 dengan memasukkan kombinasi keyboard Ctrl-R, A atau dengan mengklik tombol Jalankan Semua Pengujian di Solusi (lihat Gambar 1). Jika pengujian lolos, Anda akan melihat jendela Hasil Pengujian di Gambar 2.
Gambar 01: Jalankan Semua Pengujian dalam Solusi (Klik untuk melihat gambar ukuran penuh)
Gambar 02: Sukses! (Klik untuk melihat gambar ukuran penuh)
Menguji Data Tampilan yang dikembalikan oleh Pengontrol
Pengontrol MVC meneruskan data ke tampilan dengan menggunakan sesuatu yang disebut View Data. Misalnya, bayangkan Anda ingin menampilkan detail untuk produk tertentu saat Anda memanggil ProductController Details() tindakan. Dalam hal ini, Anda dapat membuat instans Product kelas (ditentukan dalam model Anda) dan meneruskan instans ke Details tampilan dengan memanfaatkan View Data.
Yang dimodifikasi ProductController dalam Daftar 3 menyertakan tindakan yang diperbarui Details() yang mengembalikan Produk.
Daftar 3 – ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
Function Index()
' Add action logic here
Throw New NotImplementedException()
End Function
Function Details(ByVal Id As Integer)
Dim product As New Product(Id, "Laptop")
Return View("Details", product)
End Function
End Class
Pertama, Details() tindakan membuat instans Product baru kelas yang mewakili komputer laptop. Selanjutnya, instans Product kelas diteruskan sebagai parameter kedua ke View() metode .
Anda dapat menulis pengujian unit untuk menguji apakah data yang diharapkan terkandung dalam data tampilan. Pengujian unit dalam Mencantumkan 4 pengujian apakah Produk yang mewakili komputer laptop dikembalikan atau tidak saat Anda memanggil ProductController Details() metode tindakan.
Daftar 4 – ProductControllerTest.vb
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System.Web.Mvc
Imports Store
<TestClass()> Public Class ProductControllerTest
<TestMethod()> Public Sub TestDetailsViewData()
Dim controller As New ProductController()
Dim result As ViewResult = controller.Details(2)
Dim product As Product = result.ViewData.Model
Assert.AreEqual("Laptop", product.Name)
End Sub
End Class
Di Daftar 4, TestDetailsView() metode menguji Lihat Data yang dikembalikan dengan memanggil Details() metode .
ViewData diekspos sebagai properti pada yang ViewResult dikembalikan dengan memanggil Details() metode . Properti ViewData.Model berisi produk yang diteruskan ke tampilan. Pengujian ini hanya memverifikasi bahwa produk yang terkandung dalam Data Tampilan memiliki nama Laptop.
Menguji Hasil Tindakan yang dikembalikan oleh Pengontrol
Tindakan pengontrol yang lebih kompleks mungkin mengembalikan berbagai jenis hasil tindakan tergantung pada nilai parameter yang diteruskan ke tindakan pengontrol. Tindakan pengontrol dapat mengembalikan berbagai jenis hasil tindakan termasuk ViewResult, , RedirectToRouteResultatau JsonResult.
Misalnya, tindakan yang dimodifikasi Details() di Daftar 5 mengembalikan Details tampilan saat Anda meneruskan Id produk yang valid ke tindakan. Jika Anda meneruskan Id produk yang tidak valid -- Id dengan nilai kurang dari 1 -- maka Anda diarahkan ke Index() tindakan.
Daftar 5 – ProductController.vb
Public Class ProductController
Inherits System.Web.Mvc.Controller
Function Index()
' Add action logic here
Throw New NotImplementedException()
End Function
Function Details(ByVal Id As Integer)
If Id < 1 Then
Return RedirectToAction("Index")
End If
Dim product As New Product(Id, "Laptop")
Return View("Details", product)
End Function
End Class
Anda dapat menguji perilaku Details() tindakan dengan pengujian unit di Daftar 6. Pengujian unit di Daftar 6 memverifikasi bahwa Anda diarahkan ke Index tampilan saat Id dengan nilai -1 diteruskan ke Details() metode .
Daftar 6 – ProductControllerTest.vb
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System.Web.Mvc
Imports Store
<TestClass()> Public Class ProductControllerTest
<TestMethod()> Public Sub TestDetailsRedirect()
Dim controller As New ProductController()
Dim result As RedirectToRouteResult = controller.Details(-1)
Assert.AreEqual("Index", result.Values("action"))
End Sub
End Class
Saat Anda memanggil RedirectToAction() metode dalam tindakan pengontrol, tindakan pengontrol mengembalikan RedirectToRouteResult. Pengujian memeriksa apakah RedirectToRouteResult akan mengalihkan pengguna ke tindakan pengontrol bernama Index.
Ringkasan
Dalam tutorial ini, Anda mempelajari cara membangun pengujian unit untuk tindakan pengontrol MVC. Pertama, Anda mempelajari cara memverifikasi apakah tampilan yang tepat dikembalikan oleh tindakan pengontrol. Anda mempelajari cara menggunakan ViewResult.ViewName properti untuk memverifikasi nama tampilan.
Selanjutnya, kami memeriksa bagaimana Anda dapat menguji konten View Data. Anda mempelajari cara memeriksa apakah produk yang tepat dikembalikan View Data setelah memanggil tindakan pengontrol.
Terakhir, kami membahas bagaimana Anda dapat menguji apakah berbagai jenis hasil tindakan dikembalikan dari tindakan pengontrol. Anda mempelajari cara menguji apakah pengontrol mengembalikan ViewResult atau RedirectToRouteResult.