سؤال

وأنا جديدة على jmock ومحاولة للسخرية من HttpSession. أنا على الحصول على:

وjava.lang.AssertionError: الاحتجاج غير متوقع: httpServletRequest.getSession () لا توقعات محدد: هل ...  - تنسى أن تبدأ توقع مع شرط أصل؟  - استدعاء أسلوب سخر لتحديد المعلمة توقع

وطريقة الاختبار:

وTest

public void testDoAuthorization(){

    final HttpServletRequest request = context.mock(HttpServletRequest.class);
    final HttpSession session = request.getSession();

    context.checking(new Expectations(){{
       one(request).getSession(true); will(returnValue(session));
   }});

    assertTrue(dwnLoadCel.doAuthorization(session));
}

ولقد فعلت قليلا من البحث، وليس من الواضح بالنسبة لي لا يزال كيف يتم ذلك. يشعر وكأنه أنا في عداد المفقودين بعض قطعة صغيرة. أي شخص لديه خبرة في هذا يمكن فقط لي نقطة في الاتجاه الصحيح. بفضل

هل كانت مفيدة؟

المحلول

ولست بحاجة للسخرية الكائن الطلب. منذ الطريقة التي نجري اختبارات (dwnLoadCel.doAuthorization()) يعتمد فقط على كائن HttpSession، وهذا هو ما يجب أن يسخر. لذا التعليمات البرمجية سيبدو هذا:

public void testDoAuthorization(){
    final HttpSession session = context.mock(HttpSession.class);

    context.checking(new Expectations(){{
        // ???
    }});

    assertTrue(dwnLoadCel.doAuthorization(session));

و}

ويصبح السؤال: ماذا نتوقع من SUT إلى الواقع <م> قيام مع كائن جلسة؟ تحتاج إلى التعبير عنها في توقعاتك المكالمات إلى session والقيم عودة يناظرها التي من المفترض أن يؤدي إلى doAuthorization العودة true.

نصائح أخرى

وأعتقد أنك بحاجة لاقول سياق JMock عدد المرات التي كنت تتوقع طريقة ليتم استدعاؤها قبل أن تذهب فعلا قدما والذي يطلق عليه.

final HttpServletRequest request = context.mock(HttpServletRequest.class);

context.checking(new Expectations(){{
  one(request).getSession(true); will(returnValue(session));
}});

final HttpSession session = request.getSession();

وأنا لست على دراية فائقة مع JMock ولكن لا يهمك فعلا في وحدتك اختبار dwnLoadCel كم مرة الأساليب في الكائن سخر بعض تسمى؟ أم أنك مجرد محاولة لاختبار الفصل الدراسي الذي يعتمد على HttpSession دون الدورة الفعلية؟ إذا كان هذا الأخير مما كنت أعتقد أن JMock هو مبالغة بالنسبة لك.

وقد ترغب في النظر في أي خلق فئة التي تطبق HttpSession اجهة نفسك لأغراض اختبار وحدة فقط (كعب)، وإجراء الاختبارات الخاصة بك قبالة ذلك، أو يجب أن نلقي نظرة على dwnLoadCel وتحديد ما إذا كان كان <م> حقا تحتاج إلى وجود إشارة إلى HttpSession، أو إذا كان يحتاج فقط بعض الخصائص داخل HttpSession. ريفاكتور dwnLoadCel تعتمد فقط على ما يحتاج في الواقع (أ Map أو قيمة معلمة معينة داخل الكائن Session) - وهذا سيجعل الخاص بك اختبار وحدة أسهل (الاعتماد على الحاوية بريمج يذهب وداعا)

وأعتقد أن لديك بعض مستوى حقن التبعية في صفك التي يجري اختبارها بالفعل، ولكن هل يمكن أن يكون معتمدا على نطاق واسع جدا من كائن. اختبار مدونة جوجل تمت زيارتها <لأ href = "http://googletesting.blogspot.com/2008/ 10 / تبعية حقن أسطورة reference.html "يختلط =" نوفولو noreferrer "> الكثير <لأ href =" http://misko.hevery.com/2008/07/08/how-to- التفكير حول رأس جديد مشغل / "يختلط =" نوفولو noreferrer "> من ممتازة <لأ href =" http://misko.hevery.com/2008/09/10/where-have-all -The-مشغلي الجديدة ذهب / "يختلط =" نوفولو noreferrer "> المواد على DI في الآونة الأخيرة التي قد تجدها مفيدة (أنا متأكد من أن يكون).

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