IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tests et Performance Java Discussion :

[JUnit 3.8.1][Eclipse] Assertions non bloquantes


Sujet :

Tests et Performance Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Points : 28
    Points
    28
    Par défaut [JUnit 3.8.1][Eclipse] Assertions non bloquantes
    Bonjour,

    j'espère être dans la bonne section...
    Je travaille sur des tests d'automatisation d'applications web, et je bosse sur le framework bien connu Junit.

    Ce que j'aimerais, ce serait d'utiliser les assertions ( méthodes assert*() ) de manière à "détecter" une anomalie, mais sans bloquer mon test, sans automatiquement mettre fin à celui-ci.

    Ceci afin de pouvoir reprendre des séquences antérieures avec un nouveau jeu de variables.



    Pouvez-vous m'aider?
    J'attends vos conseils sous JUnit, savoir si c'est faisable, et si oui, comment.
    Je suis au courant de l'existence de TestNG, mais dans la mesure du possible, je souhaite rester sur Junit.


    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Points : 28
    Points
    28
    Par défaut
    Dsl, je viens de voir qu'un topic en première page portait sur la même question.
    J'ai cherché "assertion non bloquante" mais n'ayant rien trouvé ai posté direct.
    (pour ma défense: ce genre de titre de topic manque de précision et rend les recherches difficiles sur les forums...)

    http://www.developpez.net/forums/sho...d.php?t=333478



    Celà dit, sans vouloir court-circuiter le topic existant, je voulais savoir s'il y avoir des réponses plus fournies?
    Il est dit que les assert ne doivent pas arrêter le test, mais ce n'est pas la constatation que je peux faire.
    Au contraire, le test junit s'arrête pour toute assertion fausse.


    La question est lancée!

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Points : 28
    Points
    28
    Par défaut
    c'est moi ou ces forums sont déserts.... ?


  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Les tests ne sont pas ce qu'il y a de plus passionnant

    Je me demandais juste pourquoi tu voulais avoir ça ? En général, quand un test avec assert n'est pas vérifié, c'est que les données risquent d'être incohérente et donc que le test doit être arrêté pour éviter un plantage ou une exception.
    Je ne répondrai à aucune question technique en privé

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Points : 28
    Points
    28
    Par défaut
    Salut.

    Je suis d'accord avec toi ce n'est pas ce qu'il y a de plus passionant, mais ca va très vite devenir un champ incontournable dans le développement et la mise en production d'applications en entreprise...

    Pour en revenir à la question, je te répondrais que je suis assez étonné de constater cette vision simpliste des framework de tests. En l'état actuel donc, c'est "ca passe" ou "ca casse". C'est regrettable dans le sens où il serait plus judicieux de pouvoir définir des niveaux d'alertes, pour utiliser les assertions à bon escient et s'en servir comme d'aiguilleurs.
    Si tel assertion est fausse, alors on fera ca (appel d'une autre méthode, relecture d'une séquence avec d'autres données, ...). Si l'assertion est critique, alors on quitte le test lorsqu'elle est fausse.

    Tu vois le genre?

    Donc la seule parade qui me reste c'est d'utiliser des if... au lieu des assertions, de réaliser mon traitement, d'activer un code d'erreur que j'aurais défini, et en fin de test lancer un assert faux avec mon message type correspondant au code de l'erreur qui a été détécté.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    /* lecture d'un fichier Excel avec la description des erreurs. Le numéro d'erreur étant l'indice des éléments initialisés de mon tableau */
     
     
    String []errorTable = errorBase.loadDataXLS("C:/init/ErrorCodes.xls");
     
    // ... traitement du test
     
    // erreur trouvée par un if...  -> on "marque l'erreur" manuellement
    errorTable[i] = "<Found_Error code n°i> ".concat(errorTable[i]);
     
     
    // à la fin du test, pour ne pas bloquer celui-ci, on balance un assert
    for(int e=0; e<errorTable.length; e++)
    {
               if(errorTable[e].contains("Found_Error code"))
    	   {
    		assertEquals("Assert "+errorTable[e], 0, 1);
    	   }
    }


    Voilà, c'est une idée comme une autre.
    Mais encore une fois, ca ne permet que de lever la première erreur reconnue pendant le test. Puisque le premier assertEquals va faire "crasher" le test Junit. Si vous voyez un moyen plus "smart" d'afficher l'ensemble... je suis preneur!
    Perso, je ne vois pas d'autre alternative que de sauver dans un second fichier excel le contenu de mon tableau errorTable pour une visualisation complète par un utilisateur/opérateur.

    Ciao

  6. #6
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Je pense qu'il es nécessaire de s'inspirer du code de Junit (notamment pour voir les exceptions lancées), à vu d'oeil, je ferais un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    class MyAssert //en réflechissant un peu, il serait possible d'hériter de Assert
    {
     
     private int WARNING = 0;
     private int ERROR = 1;
     private tableau de string;
     
     static public void fail(String message) {
      throw new AssertionFailedError(message);
    }
     
     static public void warningFail(String message) {
       //ajouter éventuellement dans le tableau de string
       System.err.println(message);
     }
     
     static public assertTrue(String message, boolean condition) {
        assertTrue(message, condition, ERROR);
      }
     
     static public boolean assertTrue(String message, boolean condition, int level) {
       if(level == ERROR) {
        if (!condition)
         fail(message); //ça va lancer l'exception rattrapé par junit
        else
         return true;
       }
     
       if(level== WARNING) {
        if (!condition)
         warningFail(message);
         return false; 
        else
         return true;
       }
     
       throw IllegalArgument("MyAssert : level bad range");
     } 
    .....
    };

    Pour information, voici le code de la classe Assert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    package junit.framework;
     
    /**
     * A set of assert methods.  Messages are only displayed when an assert fails.
     */
     
    public class Assert {
    	/**
             * Protect constructor since it is a static only class
             */
    	protected Assert() {
    	}
     
    	/**
             * Asserts that a condition is true. If it isn't it throws
             * an AssertionFailedError with the given message.
             */
    	static public void assertTrue(String message, boolean condition) {
    		if (!condition)
    			fail(message);
    	}
    	/**
             * Asserts that a condition is true. If it isn't it throws
             * an AssertionFailedError.
             */
    	static public void assertTrue(boolean condition) {
    		assertTrue(null, condition);
    	}
    	/**
             * Asserts that a condition is false. If it isn't it throws
             * an AssertionFailedError with the given message.
             */
    	static public void assertFalse(String message, boolean condition) {
    		assertTrue(message, !condition);
    	}
    	/**
             * Asserts that a condition is false. If it isn't it throws
             * an AssertionFailedError.
             */
    	static public void assertFalse(boolean condition) {
    		assertFalse(null, condition);
    	}
    	/**
             * Fails a test with the given message.
             */
    	static public void fail(String message) {
    		throw new AssertionFailedError(message);
    	}
    	/**
             * Fails a test with no message.
             */
    	static public void fail() {
    		fail(null);
    	}
    	/**
             * Asserts that two objects are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertEquals(String message, Object expected, Object actual) {
    		if (expected == null && actual == null)
    			return;
    		if (expected != null && expected.equals(actual))
    			return;
    		failNotEquals(message, expected, actual);
    	}
    	/**
             * Asserts that two objects are equal. If they are not
             * an AssertionFailedError is thrown.
             */
    	static public void assertEquals(Object expected, Object actual) {
    	    assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two Strings are equal. 
             */
    	static public void assertEquals(String message, String expected, String actual) {
    		if (expected == null && actual == null)
    			return;
    		if (expected != null && expected.equals(actual))
    			return;
    		throw new ComparisonFailure(message, expected, actual);
    	}
    	/**
             * Asserts that two Strings are equal. 
             */
    	static public void assertEquals(String expected, String actual) {
    	    assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two doubles are equal concerning a delta.  If they are not
             * an AssertionFailedError is thrown with the given message.  If the expected
             * value is infinity then the delta value is ignored.
             */
    	static public void assertEquals(String message, double expected, double actual, double delta) {
    		if (Double.compare(expected, actual) == 0)
    			return;
    		if (!(Math.abs(expected-actual) <= delta))
    			failNotEquals(message, new Double(expected), new Double(actual));
    	}
    	/**
             * Asserts that two doubles are equal concerning a delta. If the expected
             * value is infinity then the delta value is ignored.
             */
    	static public void assertEquals(double expected, double actual, double delta) {
    	    assertEquals(null, expected, actual, delta);
    	}
    	/**
             * Asserts that two floats are equal concerning a positive delta. If they
             * are not an AssertionFailedError is thrown with the given message. If the
             * expected value is infinity then the delta value is ignored.
             */
    	static public void assertEquals(String message, float expected, float actual, float delta) {
    		if (Float.compare(expected, actual) == 0)
    			return;
    		if (!(Math.abs(expected - actual) <= delta))
    				failNotEquals(message, new Float(expected), new Float(actual));
    	}
    	/**
             * Asserts that two floats are equal concerning a delta. If the expected
             * value is infinity then the delta value is ignored.
             */
    	static public void assertEquals(float expected, float actual, float delta) {
    		assertEquals(null, expected, actual, delta);
    	}
    	/**
             * Asserts that two longs are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertEquals(String message, long expected, long actual) {
    	    assertEquals(message, new Long(expected), new Long(actual));
    	}
    	/**
             * Asserts that two longs are equal.
             */
    	static public void assertEquals(long expected, long actual) {
    	    assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two booleans are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertEquals(String message, boolean expected, boolean actual) {
        		assertEquals(message, Boolean.valueOf(expected), Boolean.valueOf(actual));
      	}
    	/**
             * Asserts that two booleans are equal.
             */
    	static public void assertEquals(boolean expected, boolean actual) {
    		assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two bytes are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
      	static public void assertEquals(String message, byte expected, byte actual) {
    		assertEquals(message, new Byte(expected), new Byte(actual));
    	}
    	/**
             * Asserts that two bytes are equal.
             */
    	static public void assertEquals(byte expected, byte actual) {
    		assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two chars are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
      	static public void assertEquals(String message, char expected, char actual) {
        		assertEquals(message, new Character(expected), new Character(actual));
      	}
    	/**
             * Asserts that two chars are equal.
             */
      	static public void assertEquals(char expected, char actual) {
    		assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two shorts are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertEquals(String message, short expected, short actual) {
        		assertEquals(message, new Short(expected), new Short(actual));
    	}
      	/**
             * Asserts that two shorts are equal.
             */
    	static public void assertEquals(short expected, short actual) {
    		assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that two ints are equal. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
      	static public void assertEquals(String message, int expected, int actual) {
    		assertEquals(message, new Integer(expected), new Integer(actual));
      	}
      	/**
             * Asserts that two ints are equal.
             */
      	static public void assertEquals(int expected, int actual) {
      		assertEquals(null, expected, actual);
    	}
    	/**
             * Asserts that an object isn't null.
             */
    	static public void assertNotNull(Object object) {
    		assertNotNull(null, object);
    	}
    	/**
             * Asserts that an object isn't null. If it is
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertNotNull(String message, Object object) {
    		assertTrue(message, object != null);
    	}
    	/**
             * Asserts that an object is null.
             */
    	static public void assertNull(Object object) {
    		assertNull(null, object);
    	}
    	/**
             * Asserts that an object is null.  If it is not
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertNull(String message, Object object) {
    		assertTrue(message, object == null);
    	}
    	/**
             * Asserts that two objects refer to the same object. If they are not
             * an AssertionFailedError is thrown with the given message.
             */
    	static public void assertSame(String message, Object expected, Object actual) {
    		if (expected == actual)
    			return;
    		failNotSame(message, expected, actual);
    	}
    	/**
             * Asserts that two objects refer to the same object. If they are not
             * the same an AssertionFailedError is thrown.
             */
    	static public void assertSame(Object expected, Object actual) {
    	    assertSame(null, expected, actual);
    	}
    	/**
             * Asserts that two objects do not refer to the same object. If they do
             * refer to the same object an AssertionFailedError is thrown with the
             * given message.
             */
    	static public void assertNotSame(String message, Object expected, Object actual) {
    		if (expected == actual)
    			failSame(message);
    	}
    	/**
             * Asserts that two objects do not refer to the same object. If they do
             * refer to the same object an AssertionFailedError is thrown.
             */
    	static public void assertNotSame(Object expected, Object actual) {
    		assertNotSame(null, expected, actual);
    	}
     
    	static public void failSame(String message) {
    		String formatted= "";
     		if (message != null)
     			formatted= message+" ";
     		fail(formatted+"expected not same");
    	}
     
    	static public void failNotSame(String message, Object expected, Object actual) {
    		String formatted= "";
    		if (message != null)
    			formatted= message+" ";
    		fail(formatted+"expected same:<"+expected+"> was not:<"+actual+">");
    	}
     
    	static public void failNotEquals(String message, Object expected, Object actual) {
    		fail(format(message, expected, actual));
    	}
     
    	public static String format(String message, Object expected, Object actual) {
    		String formatted= "";
    		if (message != null)
    			formatted= message+" ";
    		return formatted+"expected:<"+expected+"> but was:<"+actual+">";
    	}
    }
    EDIT : Excuses, mais j'ai écrit ça en 3 min, il doit rester des erreurs ou des choses plus intéressantes à faire. Mais ça peut te donner une piste très intéressante.
    Je ne répondrai à aucune question technique en privé

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 94
    Points : 28
    Points
    28
    Par défaut
    Pas bête... Surcharger en fin de compte la méthode fail() ou à défaut créer une warningFail() ... Noté! Je vais essayer.

    Citation Envoyé par millie
    EDIT : Excuses, mais j'ai écrit ça en 3 min, il doit rester des erreurs
    Oui, l'instruction private tableau de string; a du mal à compiler!


    Encore merci

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    bonjour,

    Citation Envoyé par ninox_
    Je suis d'accord avec toi ce n'est pas ce qu'il y a de plus passionant
    je ne suis pas d'accord avec vous : je pense que c'est une bonne façon de travailler et qu'en plus c'est intéressant !

    Citation Envoyé par ninox_
    ca ne permet que de lever la première erreur reconnue pendant le test. Puisque le premier assertEquals va faire "crasher" le test Junit. Si vous voyez un moyen plus "smart" d'afficher l'ensemble... je suis preneur!
    jUnit signifie, il est important de rappeler cette "évidence", test unitaire.

    Il faut donc écrire des tests unitaires très simples indépendants les uns des autres sans réfléchir ou regarder l'implémentation (et d'ailleurs, on écrit le test d'abord, puis le code qui le fait passer, pas l'inverse)

    Par exemple, si je veux tester qu'une méthode utilitaire ne crashe pas sur des arguments null ou chaine vide, je vais écrire 2 tests :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	/**
             * <code>null</code> safe ?
             */
    	public void testGetLastDigitNull() {
    		assertEquals(new Integer(0), GngGenerator.getLastDigit(null));
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	/**
             * <code>null</code> safe ?
             */
    	public void testGetLastDigitEmpty() {
    		assertEquals(new Integer(0), GngGenerator.getLastDigit(""));
    	}
    un "fainéant" n'aurait écrit soit aucun test (bouh), ou l'un des deux, ou les deux à la fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	/**
             * <code>null</code> safe ?
             */
    	public void testGetLastDigitNullOrEmpty() {
    		assertEquals(new Integer(0), GngGenerator.getLastDigit(null));
    		assertEquals(new Integer(0), GngGenerator.getLastDigit(""));
    	}
    dans ce cas ou l'on écrit un seul test, si le test sur null échoue, jUnit ne lancera pas le test sur la chaine vide, mais c'est un autre test. Du coup, on ne saura jamais si le cas de la chaine vide passe ou pas.

    maintenant, sachant que mon implémentation utilise StringUtils.isNotEmpty(string) qui fait les 2 travaux (null et ""), on pourrait n'en n'écrire qu'un seul. Oui mais non : si un auter développeur change mon implémentation pour ne tester que le cas null et que le cas chaine vide est une erreur, je serais bien content d'avoir écrit ce test simple en double. En outre, avec 2 tests, je saurais précisément ce qui ne marche plus, je n'ai pas besoin de réparer puis de relancer jUnit pour arriver à l'étape suivante.

    Pour conclure, je dirais donc que la solution à ton problème :
    - n'est pas de réécrire le framework jUnit (surtout pas !)
    - n'est pas de truffer ton code de test de try/catch (bouh !)
    - il s'agit de bien comprendre les concepts derrière jUnit et de les appliquer : il te faut donc dé-cou-per tes tests : c'est certes fastidieux, mais tu te dira merci dans quelques temps, une fosi que tu auras l'habitude et que tu changeras ton implémentation en cassant quelque chose.

    Bien découper ses tests signifie aussi bien découper son code de production en petite méthodes facilement testables qui font toute un travail simple avec des entrées, des sorties bien identifiables. En outre, cela va te permettre de rendre ton travail réutilisable par d'autres, facilement compréhensible (merci la javadoc : à écire en même temps histoire de ne pas se prendre la tête ensuite à tout se taper). Cela peut paraitre contraignant, mais au final, on gagne beaucoup de temps à la rencontre d'un bug ou d'une régression, le code est refactorisable (puisque bien testé) et d'autres peuvent intégrer facilement l'équipe, parce que tout est documenté et compréhensible.

    Mes 2 cts.

  9. #9
    kij
    kij est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 362
    Points : 157
    Points
    157
    Par défaut
    Bonjour,

    Seulement ta méthode ne répond pas à toutes les attentes.
    On devrait pouvoir passer toute une série de tests sans que ça plante au premier venu, histoire d'avoir un rapport globale sur tous les tests qui ne passent pas plutôt que d'avoir uniquement le premier qui ne passe pas...

    Pour ce qui est de surcharger les méthodes de la classes Assert, certes cela permettra de résoudre le problème d'arrêt au premier tests qui ne passe pas. Seulement pour ce qui est de la génération automatique d'un rapport derrière ça se corse , voir ce n'est pas possible du tout à moins de générer son propre rapport maison qui respecte le même format XML que celui généré par JUnit (ceci par soucis d'utilisation du rapport depuis un serveur d'intégration continue par exemple, comme Hudson)

  10. #10
    Membre actif
    Avatar de foucha
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 121
    Points : 251
    Points
    251
    Par défaut
    Je rejoins jpalduc, j'aime beaucoup faire des tests unitaires, cela permet de construire peu à peu son code, de savoir ou on va, puis de refactorer en toute confiance.

    Enfin bref, son message date de deux ans alors il doit s'en moquer un peu

    Si un cas/ scenario de test equivaut à UNE methode de test unitaire, alors il est pris en compte dans les rapports. Et c'est beaucoup plus simple si c'est un par méthode de voir d'où vient le probleme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    testDivision_paramIsZero failed
    testDivision_nominalCase succeeded
    ++
    Foucha.
    ++
    Foucha.

    =========

    "du code propre c'est du code qui fait exactement ce qu'on croit que ça fait"

    Mes Articles DVP

Discussions similaires

  1. Réponses: 9
    Dernier message: 26/10/2005, 12h29
  2. Réponses: 5
    Dernier message: 02/09/2005, 12h47
  3. Rendre la lecture non bloquante
    Par Charlinecha dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/07/2005, 15h46
  4. Réponses: 3
    Dernier message: 16/03/2004, 16h42
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo