1

私は過去に Java で開発したことがありますが、現在はこの少し古いチュートリアルを使用して Grails/Groovy を学ぼうとしています。

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 は 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))
}

これら 2 つのバージョンのテストは、基本的に同じものですよね?

Grails 1.2.1 または Groovy に、私が理解していない新しい何かがない限り。値はどちらもCalendar.getInstance().get(Calendar.YEAR)によって返される値であるため、これらは同じ型である必要があります。

4

1 に答える 1

2

dateTagLib.thisYear() から返されるオブジェクトは文字列であってはなりません。

試す

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

実際の例では、Groovy は .thisYear() を String に変換しています。

dateTagLib.thisYear().class を出力してください。

乾杯

リー

于 2010-03-30T03:24:01.833 に答える