¿Por qué está fallando esta prueba (trivial) unidad?
Pregunta
Esto fue tomado casi textualmente de 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()
}
}
salida grails test-app DateTagLib
:
-------------------------------------------------------
Running 1 unit test...
Running test DateTagLibTests...
testThisYear...FAILED
Tests Completed in 359ms ...
-------------------------------------------------------
Tests passed: 0
Tests failed: 1
-------------------------------------------------------
He intentado coincidir los tipos (int / long / String), pero todavía estoy golpeando mi cabeza contra la pared.
Esta prueba también falla:
void testThisYear() {
long expected = Calendar.getInstance().get(Calendar.YEAR)
assertEquals("years do NOT match", expected, (long) dateTagLib.thisYear())
}
Solución
Trate la siguiente vez
class DateTagLibTests extends TagLibUnitTestCase {
void testThisYear() {
String expected = Calendar.getInstance().get(Calendar.YEAR)
tagLib.thisYear()
assertEquals("years do NOT match", expected, tagLib.out)
}
}
Su código original tiene 2 problemas:
- No debe crear una instancia
DateTagLib
explícitamente. Ya está disponible a través de una propiedad de la clase de test denominadatagLib
-
thisYear
no devuelve el valor del año, que lo escribe enout
. Dentro de una prueba se puede acceder al contenido escrito a la salida a travéstagLib.out
Otros consejos
out << Calendar.getInstance().get(Calendar.YEAR)
pone el resultado en out
, si quieres probar este uso def thisYear = { Calendar.getInstance().get(Calendar.YEAR) }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow