Domanda

Questa è stata presa quasi alla lettera da IBM Mastering Grails serie.

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

uscita grails test-app DateTagLib:

-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
                    testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------

Ho provato a corrispondere i tipi (int / lungo / String), ma sto ancora sbattere la testa contro il muro.

Questo test ha esito negativo anche:

void testThisYear() {
    long expected = Calendar.getInstance().get(Calendar.YEAR)
    assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
È stato utile?

Soluzione

Prova il seguente invece

class DateTagLibTests extends TagLibUnitTestCase {

    void testThisYear() {
        String expected = Calendar.getInstance().get(Calendar.YEAR)
        tagLib.thisYear()
        assertEquals("years do NOT match", expected, tagLib.out)
    }

}

Il tuo codice originale ha 2 problemi:

  • Non si dovrebbe istanziare DateTagLib esplicitamente. E 'già disponibile attraverso una proprietà della classe di test chiamato tagLib
  • thisYear non restituisce il valore dell'anno, scrive a out. All'interno di un test è possibile accedere al contenuto scritto con l'uscita tramite tagLib.out

Altri suggerimenti

out << Calendar.getInstance().get(Calendar.YEAR) pone il risultato in out, se si desidera verificare questo uso def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top