簡體   English   中英

為什么這個(簡單的)單元測試失敗?

[英]Why is this (trivial) unit test failing?

這幾乎完全來自IBM的Mastering Grails系列。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM