Grails单元测试:为什么这个声明失败了?

时间:2010-03-30 02:17:22

标签: grails junit assertions

我过去使用Java开发,现在我正在尝试使用this slightly dated tutorial学习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,而不适用于tutorial 中使用的版本)

出于某种原因,上述测试失败了:

  

预期:其中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)

1 个答案:

答案 0 :(得分:2)

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

尝试

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

在你的工作示例中,Groovy正在将.thisYear()转换为String。

打印出dateTagLib.thisYear()。class以确定。

欢呼声