2010-03-30 133 views
1

我以前在Java中開發過,現在我正在嘗試使用this slightly dated tutorial來學習Grails/Groovy。Grails單元測試:爲什麼此聲明失敗?

import grails.test.* 

class DateTagLibTests extends TagLibUnitTestCase { 

    def dateTagLib 

    protected void setUp() { 
     super.setUp() 
     dateTagLib = new DateTagLib() 
    } 

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

    void testThisYear() { 
     String expected = Calendar.getInstance().get(Calendar.YEAR) 

     // NOTE: This statement fails 
     assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear()) 

    } 
} 

DateTagLibTests.groovy
注:此TagLibUnitTestCase是用於tutorial使用的Grails 1.2.1而不是版本)

出於某種原因,上述的測試失敗,並:

預計:< 2010>但是:< 2010>

我試圖替換上面與測試以下替代版本的測試,並且測試通過就好:

void testThisYear() { 
    String expected = Calendar.getInstance().get(Calendar.YEAR) 
    String actual = dateTagLib.thisYear() 

    // NOTE: The following two assertions work: 
    assertEquals("the years don\'t match", expected, actual) 
    assertTrue("the years don\'t match", expected.equals(actual)) 
} 

測試這兩個版本基本相同對嗎?

除非在Grails 1.2.1或Groovy中有一些我不瞭解的新東西。它們應該是相同類型的,因爲這些值都是由返回的值Calendar.getInstance()。get(Calendar.YEAR)

+0

複製我的壞! – leeand00 2010-03-30 02:21:46

+0

@Victor是的,我對這個測試版非常感興趣!但是我害怕我被拒之門外! – leeand00 2011-01-20 01:58:18

+1

是的,它今天剛剛開始不到12個小時。你有點錯過了火車,但不用擔心,它會在7天內進入公測階段:) – greatwolf 2011-01-20 02:02:44

回答

2

從dateTagLib.thisYear()返回的對象不能是字符串。

嘗試

assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString()) 

在你的工作示例,Groovy中被轉換.thisYear()爲你的字符串。

打印出dateTagLib.thisYear()。類來確定。

歡呼

+0

謝謝Lee(這個問題不是一個確切的副本......但它雖然接近......) – leeand00 2010-03-30 13:15:13