Question Junit jeter un avertissement tout en passant le test


Je travaille sur un projet en ce moment où nous utilisons Junit pour tester, mais comme ses étapes sont encore assez avancées, de nombreuses fonctionnalités ne sont pas encore implémentées, même si des tests ont déjà été écrits pour eux.

cela signifie que ces tests (évidemment) échouent toujours

Je me demandais si quelqu'un savait comment faire en sorte que JUnit réussisse le test tout en affichant un avertissement. de préférence avec un message personnalisable afin que nous puissions noter que la fonctionnalité n'est pas encore implémentée.

Le but de cet être que nous voulons coder pour compiler uniquement si tous les tests réussissent, et pour le moment, ce n'est simplement pas possible.

Je me rends compte que nous pouvons simplement commenter ou supprimer les tests de problèmes, mais nous risquons alors d’oublier de les rajouter plus tard.


12
2017-08-05 00:07


origine


Réponses:


Vous pouvez @Ignorer devant la méthode de test. Cela dépend alors du type de test que vous obtenez. Vous pouvez obtenir quelque chose comme exécuter avec succès 25 tests et 6 tests sont ignorés ...

Toutes les autres choses dépendent de la manière dont vous voulez exécuter les tests unitaires.


4
2017-08-05 00:23



La plupart des runners JUnit que j'ai vus vous donneront un des quatre états pour un scénario de test: passé, échec, erreur ou ignorée.

Comme cela avait été le cas, les erreurs (une exception) ont été signalées de la même manière que si elles échouaient ("résultat rouge"). pour?

Comme mentionné par Janusz, vous pouvez utiliser le @Ignore attribut pour ignorer un cas de test pouvant contenir également un message:

@Ignore("disabled until implementation is finished")
public void testMe() {
   //do something
}

La plupart des coureurs ne les listeront pas explicitement dans les résultats, mais vous pourrez rechercher automatiquement les cas de test ignorés en utilisant les outils, en recherchant le @Ignore attribuer et générer un rapport après, qui répertorie tous les scénarios de test qui ont été ignorés et la raison (donnée dans l'attribut) pourquoi.


8
2017-08-05 00:32



Serait org.junit.Assume faire ce dont vous avez besoin?


7
2017-08-05 00:49



Je sais que je suis dans 2 ans, mais je commenterais / ignorerais les tests dont vous n'avez pas besoin et, en tant que processus, assurez-vous que les revues de code public couvrent également les tests unitaires ainsi que le code soumis. Ce qui devrait améliorer vos méthodes de test et votre couverture globale.


1
2018-03-08 15:06



Vous pouvez lancer une exception NotImplementedException dans vos nouvelles méthodes:

Apache Commons NotImplementedException

par exemple.

public String getName() {
    throw new NotImplementedException("Oh so soon...");
}

puis spécifiez dans votre test JUnit qu'il doit s'attendre à ce que cette exception soit générée:

@Test (expected=NotImplementedException.class) 
public void testGetName()  {
    myKingdom.getName();
}

Cela rappelle à tout le monde d’implémenter cette fonctionnalité, bien sûr, quand ils l’ajoutent (ou la suppriment par erreur), le test unitaire remarquera que l’exception n’est plus lancée et lance un gros vacillement.


0
2017-08-05 00:30



Les tests unitaires sont plus efficaces lorsque les tests sont complets, c’est-à-dire qu’ils font quelque chose et que la défaillance a quelque chose qui ne va pas. ils ne sont donc pas conçus pour "échouer à moitié" ou "passer avec un avertissement".

C'est parce que les tests unitaires sont conçus pour tester. Ainsi, quand ils échouent, quelque chose ne va pas.

Ne serait-il donc pas préférable de ne pas utiliser les tests pour suivre ce qui n’est pas encore implémenté, mais plutôt d’utiliser des tests pour tester les fonctionnalités est Là.

Donc, les tests qui testent actuellement des fonctionnalités qui ne sont pas là ne devraient probablement pas être exécutés tant que cette fonctionnalité n’est pas là.


0
2017-08-07 14:19