Grails Tests unitaires: Pourquoi cette déclaration a échoué?
-
23-09-2019 - |
Question
J'ai développé en Java dans le passé, et maintenant je suis en train d'apprendre Grails / Groovy en utilisant ce tutoriel légèrement défraîchi .
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 ( Remarque: ce TagLibUnitTestCase est pour Grails 1.2.1 et non la version utilisée dans la tutoriel )
Pour une raison quelconque le test ci-dessus échoue avec:
prévu: <2010>, mais était: <2010>
J'ai essayé de remplacer le test ci-dessus avec la version alternative suivante du test et le test passe très bien:
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))
}
Ces deux versions du test sont fondamentalement la même chose non?
A moins qu'il ya quelque chose de nouveau dans Grails 1.2.1 ou Groovy que je ne comprends pas. Ils devraient être du même type, car les valeurs sont à la fois la valeur retournée par Calendar.getInstance (). Get (Calendar.YEAR)
La solution
L'objet retourné de dateTagLib.thisYear () ne doit pas être une chaîne.
Essayez
assertEquals("the years dont match and I dont know why.", expected, dateTagLib.thisYear().toString())
Dans votre exemple de travail, Groovy est de convertir .thisYear () à une chaîne pour vous.
Imprimez dateTagLib.thisYear () classe. Pour être sûr.
hourras
Lee