وحدة اختبار الوحدة (Xunit) وحدة تحكم ASP.NET MVC مع نموذج إدخال مخصص؟

StackOverflow https://stackoverflow.com/questions/2834390

سؤال

أواجه صعوبة في العثور على معلومات حول ما أتوقع أن أكون سيناريو مباشر للغاية. أحاول وحدة اختبار إجراء على جهاز التحكم 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

نصائح أخرى

أنت تخلط عن مثيل فارغ داخل إجراء وحدة التحكم الخاصة بك. ربما في الكود الذي أخرجته "لتبسيط" السؤال. انظر إلى مكدس المكالمات في نتائج الاختبار لمعرفة ما. قد تحتاج إلى السخرية من شيء للاختبار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top