وحدة اختبار الوحدة (Xunit) وحدة تحكم ASP.NET MVC مع نموذج إدخال مخصص؟
-
26-09-2019 - |
سؤال
أواجه صعوبة في العثور على معلومات حول ما أتوقع أن أكون سيناريو مباشر للغاية. أحاول وحدة اختبار إجراء على جهاز التحكم ASP.NET MVC 2 الذي يستخدم نموذج إدخال مخصص مع DataAnnotions. إطار الاختبار الخاص بي هو Xunit ، كما هو مذكور في العنوان.
ها هي عادتي نموذج الإدخال:
public class EnterPasswordInputModel
{
[Required(ErrorMessage = "")]
public string Username { get; set; }
[Required(ErrorMessage = "Password is a required field.")]
public string Password { get; set; }
}
وهنا هو بلدي مراقب (أخرج بعض المنطق للتبسيط لهذا السابقين):
[HttpPost]
public ActionResult EnterPassword(EnterPasswordInputModel enterPasswordInput)
{
if (!ModelState.IsValid)
return View();
// do some logic to validate input
// if valid - next View on successful validation
return View("NextViewName");
// else - add and display error on current view
return View();
}
وهنا هو بلدي حقيقة Xunit (مبسط أيضًا):
[Fact]
public void EnterPassword_WithValidInput_ReturnsNextView()
{
// Arrange
var controller = CreateLoginController(userService.Object);
// Act
var result = controller.EnterPassword(
new EnterPasswordInputModel
{
Username = username, Password = password
}) as ViewResult;
// Assert
Assert.Equal("NextViewName", result.ViewName);
}
عندما أقوم بإجراء اختباري ، أحصل على الخطأ التالي في حقيقة الاختبار عند محاولة استرداد نتيجة وحدة التحكم (قسم ACT):
System.NullReferenceException: Object reference not set to an instance of an object.
شكرا مقدما على أي مساعدة يمكن أن تقدم!
المحلول
أعتقد أنني على المسار الصحيح لحل رغم ذلك. هذا هو التغيير الذي أجريته على وحدة التحكم الخاصة بي:
أصلي
if (!ModelState.IsValid)
return View();
محدث
if (!TryUpdateModel(loginInput))
return View();
يبدو أن ربط النموذج لم يحدث أثناء الاختبار. يبدو أن ربط النموذج لا يحدث ما لم يحدث منشور. من خلال إجبار المحاولة على ربط النموذج ، تمكنت من الحصول على الاختبار.
ملحوظة: كان هناك أيضًا خطأ في عملي كان يسبب مرجعتي الفارغة الأصلية التي تسببت فيها أثناء محاولة معرفة سبب عدم التحقق من صحة النموذج الخاص بي.
المرجعي:http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html
نصائح أخرى
أنت تخلط عن مثيل فارغ داخل إجراء وحدة التحكم الخاصة بك. ربما في الكود الذي أخرجته "لتبسيط" السؤال. انظر إلى مكدس المكالمات في نتائج الاختبار لمعرفة ما. قد تحتاج إلى السخرية من شيء للاختبار.