لماذا فشل اختبار الوحدة (التافهة)؟
سؤال
تم أخذ هذا حرفيًا تقريبًا من 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) }
لا تنتمي إلى StackOverflow