سؤال

تم أخذ هذا حرفيًا تقريبًا من IBM's إتقان الكأس مسلسل.

datetaglib.groovy:

class DateTagLib {
  def thisYear = {
    out << Calendar.getInstance().get(Calendar.YEAR)
  }
}

datetaglibtests.groovy:

class DateTagLibTests extends TagLibUnitTestCase {
    def dateTagLib

    protected void setUp() {
        super.setUp()

        dateTagLib = new DateTagLib()
    }

    void testThisYear() {
        String expected = Calendar.getInstance().get(Calendar.YEAR)
        assertEquals("years do NOT match", expected, dateTagLib.thisYear())
    }

    protected void tearDown() {
        super.tearDown()
    }
}

grails test-app DateTagLib انتاج:

-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
                    testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------

حاولت مطابقة الأنواع (int/long/string) ، لكنني ما زلت أضرب رأسي على الحائط.

فشل هذا الاختبار أيضًا:

void testThisYear() {
    long expected = Calendar.getInstance().get(Calendar.YEAR)
    assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
هل كانت مفيدة؟

المحلول

جرب ما يلي بدلاً من ذلك

class DateTagLibTests extends TagLibUnitTestCase {

    void testThisYear() {
        String expected = Calendar.getInstance().get(Calendar.YEAR)
        tagLib.thisYear()
        assertEquals("years do NOT match", expected, tagLib.out)
    }

}

الكود الأصلي الخاص بك لديه مشاكل 2:

  • يجب ألا تنشئ DateTagLib صراحة. وهي متوفرة بالفعل من خلال خاصية فئة الاختبار المسمى tagLib
  • thisYear لا يعيد قيمة السنة ، فهي تكتبها out. ضمن اختبار يمكنك الوصول إلى المحتوى المكتوب إلى الإخراج عبر tagLib.out

نصائح أخرى

out << Calendar.getInstance().get(Calendar.YEAR) يضع النتيجة في out, ، إذا كنت ترغب في اختبار هذا الاستخدام def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }

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