ASP.NET MVC Uygulamaları için Birim Testleri Oluşturma (C#)
tarafından Stephen Walther
Denetleyici eylemleri için birim testleri oluşturmayı öğrenin. Bu öğreticide Stephen Walther, bir denetleyici eyleminin belirli bir görünümü döndürdüğü, belirli bir veri kümesini döndürdüğü veya farklı türde bir eylem sonucu döndürdüğü testinin nasıl yapılacağını gösterir.
Bu öğreticinin amacı, ASP.NET MVC uygulamalarınızdaki denetleyiciler için birim testleri nasıl yazabileceğinizi göstermektir. Üç farklı tür birim testi oluşturmayı ele alıyoruz. Bir denetleyici eylemi tarafından döndürülen görünümü test etmeyi, bir denetleyici eylemi tarafından döndürülen Verileri Görüntüle eylemini test etmeyi ve bir denetleyici eyleminin sizi ikinci bir denetleyici eylemine yönlendirip yönlendirmediğini test etmeyi öğreneceksiniz.
Test Altında Denetleyici Oluşturma
Test etmek istediğimiz denetleyiciyi oluşturarak başlayalım. adlı ProductController
denetleyici, Liste 1'de yer alır.
Listeleme 1 – ProductController.cs
using System;
using System.Web.Mvc;
namespace Store.Controllers
{
public class ProductController : Controller
{
public ActionResult Index()
{
// Add action logic here
throw new NotImplementedException();
}
public ActionResult Details(int Id)
{
return View("Details");
}
}
}
ve ProductController
Details()
adlı Index()
iki eylem yöntemi içerir. Her iki eylem yöntemi de bir görünüm döndürür. Eylemin Details()
Id adlı bir parametre kabul ettiğini göreceksiniz.
Denetleyici tarafından döndürülen Görünümü Test Etme
öğesinin doğru görünümü döndürip döndürmediğini test etmek istediğimizi ProductController
düşünün. Eylem çağrıldığında ProductController.Details()
Ayrıntılar görünümünün döndürülmesini sağlamak istiyoruz. Listeleme 2'deki test sınıfı, eylem tarafından ProductController.Details()
döndürülen görünümü test eden bir birim testi içerir.
Listeleme 2 – ProductControllerTest.cs
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Store.Controllers;
namespace StoreTests.Controllers
{
[TestClass]
public class ProductControllerTest
{
[TestMethod]
public void TestDetailsView()
{
var controller = new ProductController();
var result = controller.Details(2) as ViewResult;
Assert.AreEqual("Details", result.ViewName);
}
}
}
Listing 2'deki sınıfı adlı TestDetailsView()
bir test yöntemi içerir. Bu yöntem üç kod satırı içerir. İlk kod satırı sınıfının yeni bir örneğini ProductController
oluşturur. İkinci kod satırı denetleyicinin Details()
eylem yöntemini çağırır. Son olarak, son kod satırı eylem tarafından Details()
döndürülen görünümün Ayrıntılar görünümü olup olmadığını denetler.
özelliği, ViewResult.ViewName
bir denetleyici tarafından döndürülen görünümün adını temsil eder. Bu özelliği test etmeyle ilgili büyük bir uyarı. Denetleyicinin görünüm döndürmesi için iki yol vardır. Denetleyici açıkça şuna benzer bir görünüm döndürebilir:
public ActionResult Details(int Id)
{
return View("Details");
}
Alternatif olarak, görünümün adı aşağıdaki gibi denetleyici eyleminin adından çıkarılabilir:
public ActionResult Details(int Id)
{
return View();
}
Bu denetleyici eylemi, adlı Details
bir görünüm de döndürür. Ancak, görünümün adı eylem adından çıkarılır. Görünüm adını test etmek istiyorsanız, denetleyici eyleminden görünüm adını açıkça döndürmeniz gerekir.
Ctrl-R, A klavye bileşimini girerek veya Çözümde Tüm Testleri Çalıştır düğmesine tıklayarak Liste 2'de birim testini çalıştırabilirsiniz (bkz. Şekil 1). Test başarılı olursa, Şekil 2'de Test Sonuçları penceresini görürsünüz.
Şekil 01: Tüm Testleri Çözümde Çalıştırma (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 02: Başarı! (Tam boyutlu görüntüyü görüntülemek için tıklayın)
Denetleyici tarafından döndürülen Görünüm Verilerini Test Etme
MVC denetleyicisi adlı View Data
bir öğeyi kullanarak verileri bir görünüme geçirir. Örneğin, eylemi çağırırken ProductController Details()
belirli bir ürünün ayrıntılarını görüntülemek istediğinizi düşünün. Bu durumda, bir Product
sınıfın örneğini oluşturabilir (modelinizde tanımlanır) ve örneğini görünümünden View Data
yararlanarak geçirebilirsinizDetails
.
Liste 3'te değiştirilen ProductController
, ürün döndüren güncelleştirilmiş Details()
bir eylem içerir.
Listeleme 3 – ProductController.cs
using System;
using System.Web.Mvc;
namespace Store.Controllers
{
public class ProductController : Controller
{
public ActionResult Index()
{
// Add action logic here
throw new NotImplementedException();
}
public ActionResult Details(int Id)
{
var product = new Product(Id, "Laptop");
return View("Details", product);
}
}
}
İlk olarak, Details()
eylem bir dizüstü bilgisayarı temsil eden sınıfının yeni bir örneğini Product
oluşturur. Ardından sınıfının örneği yöntemine Product
ikinci parametre View()
olarak geçirilir.
Beklenen verilerin görünüm verilerinde bulunup bulunmadığını test etmek için birim testleri yazabilirsiniz. Listeleme 4'teki birim testi, eylem yöntemini çağırdığınızda ProductController Details()
dizüstü bilgisayarı temsil eden bir Ürünün döndürülip döndürülmeyeceğini test eder.
Listeleme 4 – ProductControllerTest.cs
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Store.Controllers;
namespace StoreTests.Controllers
{
[TestClass]
public class ProductControllerTest
{
[TestMethod]
public void TestDetailsViewData()
{
var controller = new ProductController();
var result = controller.Details(2) as ViewResult;
var product = (Product) result.ViewData.Model;
Assert.AreEqual("Laptop", product.Name);
}
}
}
Listeleme 4'te TestDetailsView()
yöntem, yöntemini çağırarak döndürülen Verileri Görüntüle'yi test ediyor Details()
. ViewData
yöntemi çağrılarak Details()
döndürülen üzerinde ViewResult
bir özellik olarak kullanıma sunulur. özelliği, ViewData.Model
görünüme geçirilen ürünü içerir. Test basitçe Verileri Görüntüle'de bulunan ürünün Dizüstü bilgisayar adını içerdiğini doğrular.
Denetleyici tarafından döndürülen Eylem Sonucunu Test Etme
Daha karmaşık bir denetleyici eylemi, denetleyici eylemine geçirilen parametrelerin değerlerine bağlı olarak farklı türde eylem sonuçları döndürebilir. Denetleyici eylemi , RedirectToRouteResult
veya JsonResult
gibi ViewResult
çeşitli türlerde eylem sonuçları döndürebilir.
Örneğin, Liste 5'teki değiştirilmiş Details()
eylem, eyleme Details
geçerli bir ürün kimliği geçirdiğinizde görünümü döndürür. Geçersiz bir ürün kimliği (değeri 1'den küçük bir kimlik) geçirirseniz eyleme Index()
yönlendirilirsiniz.
Listeleme 5 – ProductController.cs
using System;
using System.Web.Mvc;
namespace Store.Controllers
{
public class ProductController : Controller
{
public ActionResult Index()
{
// Add action logic here
throw new NotImplementedException();
}
public ActionResult Details(int Id)
{
if (Id < 1)
return RedirectToAction("Index");
var product = new Product(Id, "Laptop");
return View("Details", product);
}
}
}
Liste 6'daki birim testiyle eylemin davranışını Details()
test edebilirsiniz. Listeleme 6'daki birim testi, -1 değerine sahip bir kimlik yöntemine Index
geçirildiğinde görünüme Details()
yeniden yönlendirildiğinizi doğrular.
Listeleme 6 – ProductControllerTest.cs
using System.Web.Mvc;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Store.Controllers;
namespace StoreTests.Controllers
{
[TestClass]
public class ProductControllerTest
{
[TestMethod]
public void TestDetailsRedirect()
{
var controller = new ProductController();
var result = (RedirectToRouteResult) controller.Details(-1);
Assert.AreEqual("Index", result.Values["action"]);
}
}
}
Bir denetleyici eyleminde RedirectToAction()
yöntemini çağırdığınızda, denetleyici eylemi bir RedirectToRouteResult
döndürür. Test, kullanıcının adlı Index
bir denetleyici eylemine yönlendirilip yönlendirilmeyeceğini RedirectToRouteResult
denetler.
Özet
Bu öğreticide, MVC denetleyici eylemleri için birim testleri oluşturmayı öğrendiniz. İlk olarak, doğru görünümün bir denetleyici eylemi tarafından döndürülp döndürülmediğini doğrulamayı öğrendinsiniz. Bir görünümün ViewResult.ViewName
adını doğrulamak için özelliğini kullanmayı öğrendinsiniz.
Ardından içeriğini nasıl test ettiğinizi View Data
inceledik. Denetleyici eylemi çağrıldıktan sonra doğru ürünün iade View Data
edilip edilmediğini denetlemeyi öğrendiniz.
Son olarak, bir denetleyici eyleminden farklı türlerde eylem sonuçlarının döndürülip döndürülmeyeceğini nasıl test ettiğinizi ele aldık. Denetleyicinin bir veya RedirectToRouteResult
döndürerek döndürmediğini ViewResult
test etme hakkında bilgi edindiyseniz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin