yöntem parametreleri için sınayın Denetleyicimi doğrulamak için birim testlerini yazarken, bağlantı özelliklerinin doğru şekilde kurulduğundan emin olmak istiyorum. Aşağıdaki yöntem yapısıyla, sadece geçerli alanların bir birim testinden geçmesini nasıl sağlayabilirim?Birim BindAttribute,
public ActionResult AddItem([Bind(Include = "ID, Name, Foo, Bar")] ItemViewModel itemData)
{
if (ModelState.IsValid)
{
// Save and redirect
}
// Set Error Messages
// Rebuild object drop downs, etc.
itemData.AllowedFooValues = new List<Foo>();
return View(itemData);
}
Geniş Açıklama: bizim modellerin birçoğu, ileri geri göndermek istemiyorum izin değerlerin listeleri var, bu yüzden onları yeniden ne zaman (ModelState.IsValid == false). Tüm bu çalışmaları sağlamak için, listenin yeniden oluşturulduğunu, ancak yöntemi çağırmadan önce listeyi temizlemeden, testin geçersiz olduğunu iddia etmek için birim testleri uygulamak istiyoruz.
Modelin doğrulanmasını sağlamak için bu SO answer numaralı yardımcı yöntemini kullanarak yardımcı yöntemini kullanıyoruz ve sonra birim testimiz böyle bir şeydir.
public void MyTest()
{
MyController controller = new MyController();
ActionResult result = controller.AddItem();
Assert.IsNotNull(result);
ViewResult viewResult = result as ViewResult;
Assert.IsNotNull(viewResult);
ItemViewModel itemData = viewResult.Model as ItemViewModel;
Assert.IsNotNull(recipe);
// Validate model, will fail due to null name
controller.ValidateViewModel<ItemViewModel, MyController>(itemData);
// Call controller action
result = controller.AddItem(itemData);
Assert.IsNotNull(result);
viewResult = result as ViewResult;
Assert.IsNotNull(viewResult);
itemData = viewResult.Model as ItemViewModel;
// Ensure list was rebuilt
Assert.IsNotNull(itemData.AllowedFooValues);
}
Doğru yönde herhangi bir yardım veya işaretçi büyük beğeni topluyor.
Genel olarak bu yüzden şimdi benim testleri aşağıdaki gibi görünür, bir çok temiz ve kolay çözüm oldu Ne aradığınızı net değil. Bağlama Özniteliğinin kullanıldığını ve denetleyicinizdeki (ID, Foo ...) doğru değerler ile ayarlandığını algılamanın bir yolunu mu arıyorsunuz? Veya MVC çalışma zamanının özniteliği doğru şekilde kullandığını test etmenin bir yolunu mu arıyorsunuz? Veya MVC çalışma zamanının davranışını yeniden oluşturmak için niteliği test modelinize manuel olarak uygulamanın bir yolu, böylece yöntemlerinizi test edebilirsiniz? Ya da tamamen başka bir şey? – forsvarir
Bağlama özniteliğinin uygulandığını sınamanın bir yolunu arıyorum, böylece bir modelin ciltleme için bildirilmemiş alanlar varsa, değerler, sınamalardan geçmeyecek şekilde sınamadan denetleyiciye aktarılmazlar. Bir yazı üzerindeki kontrolöre görünümden. Son hedef, tüm alanların denetleyiciye bir gönderi üzerinde güncelleştirilen yalnızca ilişkili değerler ile doğru bir şekilde bağlı olduğundan emin olmak ve "kötü" bir model (bazı sunucu doğrulama durumları için gerçekleşir) yayınlayabilmek ve Bir test tarafından uygulanan if (ModelState.IsValid) mantığı. –
Bu işe yarıyor harika. Çözümünüzün sorgunuzda düzenlenmesi genellikle iyi bir fikir değildir, çünkü bir sorudan ziyade etkin bir cevaptır. Sorunuzdan düzenlemek ve bunun yerine soruya bir cevap olarak göndermek isteyebilirsiniz. Soru-Cevap bölümünü bölümlendirmeye yardımcı olur ve bonus olarak sizin için tuhaf bir oylama ile sonuçlanabilir. Kişilerin, gönderiye baktıkları sırada sorununun yanında kalmasını istiyorsanız, o zaman kabul edilen cevabı yazılarınıza da aktarabilirsiniz (diğer insanların görüşlerinin farklı olmasına rağmen bir sorunum yok) – forsvarir