اختبار الوحدة وحدة تحكم مع نموذج نموذج مخصص
-
18-09-2019 - |
سؤال
في طلبي لدي نموذج مخصص نموذجي قمت بتعيينه على DefaultBinder في Global.asax:
ModelBinders.Binders.DefaultBinder = new XLDataAnnotationsModelBinder();
عند إجراء اختبارات وحدة التحكم في وحدات التحكم، أحتاج إلى التأكد من أن وحدة التحكم تستخدم Binder النموذج المخصص ولكني لا أعرف كيفية القيام بذلك.
يختبر بلدي يشبه هذا:
[Test]
public void Details_Post_Action_Fails_To_Change_Email_Address_With_Duplicate()
{
// Setup
var controller = new AccountController();
controller.SetFakeControllerContext();
var param = Customer.Load(30005);
param.EmailAddress = "foo@bar.com";
// Test
var result = controller.Details(param);
// Assert
Assert.IsTrue(result is ViewResult); // will be ViewResult if failed....
Assert.IsFalse(((ViewResult)result).ViewData.ModelState.IsValid);
}
مع هذه الوحدة اختبار وحدة التحكم ينتهي باستخدام DefaultModelbinder. ما الذي يمكنني إضافته في هذا الاختبار لضمان استخدام وحدة التحكم Binder النموذج المخصص؟
المحلول
قدم سكوت هانزيلمان وظيفة مدونة ذات صلة بهذا منذ فترة:
تقسيم DateTime - اختبار الوحدة ASP.NET MVC مخصص نموذج المجلدات
الجزء الذي من شأنه أن يهتم أنك في أسفل المنشور تحت "اختبار موثق النموذج المخصص". في الأساس، تقوم بإنصاف ModelBindingContextext، ثم قم بإنشاء BrowsBinder و BIND للاتصال () على ModelBinder يمر في ModelBindingContext الذي قمت بإنشائه (وسياق وحدة التحكم إذا لزم الأمر).
فيما يلي سؤال آخر بحيث يحتوي أيضا على المعلومات التي تحتاجها (حتى لو كنت لا تستخدم موك):