grails - Grails单元测试:为什么此语句失败?

标签 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中使用的版本)

由于某种原因,以上测试失败并显示:

expected:<2010> but was:<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)返回的值

最佳答案

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

尝试

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

在您的工作示例中,Groovy正在为您将.thisYear()转换为字符串。

确保打印出dateTagLib.thisYear()。class。

干杯

背风处

关于grails - Grails单元测试:为什么此语句失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2542470/

相关文章:

grails - Grails + MySQL-BasicDataSource或JNDI

java - 我可以使用 Mockito 延迟 stub 方法响应吗?

java - 比较 JUnit 断言中的数组,简洁的内置方式?

hibernate - GORM - 在 Grails 中查询一对多关联

grails - Groovy/Grails工具套件中的Web应用程序重新加载问题

grails - 如何禁止在grails中访问 View 或 Controller

java - 在多个线程中运行 Junit 测试。 Gatling 可以执行 JUnit 测试吗?

java - 如何验证是否在被测系统上调用了方法(不是模拟)

ruby-on-rails - 为什么 assert_select 不接受参数 rails 4.2?

java - 无法创建文件并断言其存在