2017-08-15 14 views
0

J'ai mis en place un pipeline CI (CI Gitlab si c'est important) pour mon dernier projet Python et ajouté plusieurs cas de test pour les choses que je veux encore implémenter. Dans chaque cas de test, je lève un NotImplementedError puisque, bien, il n'a pas encore été implémenté.Supprimer un type spécifique d'exceptions dans le nez

import unittest 

class GenericTest(unittest.TestCase): 

    def test_stuff(self): 
     """I'll fill this in when I come around to it.""" 
     raise NotImplementedError 

Généralement, je veux que ces tests échouent, car ils ne fonctionnent pas encore correctement. Cependant, quand je pousse dans mon dépôt et que les tests sont exécutés sur le système CI, je voudrais sauter ces tests. Je sais déjà qu'ils vont «échouer» et qu'ils masquent les tests qui échouent.

Existe-t-il un moyen de supprimer ces exceptions, ou un type spécifique d'exception (comme IKnowThisWillFailError), de sorte que les tests affectés ne soient pas comptés comme ayant échoué?

+0

Vous soulevez vraiment l'erreur dans le test? Qu'en est-il de la création de la méthode dans l'application et augmenter l'erreur là, alors vous pouvez, sauf l'erreur dans le test jusqu'à ce que vous avez implémenté la fonctionnalité. –

+1

@JanZeiseweis je le fais, car il teste la fonctionnalité qui doit être ajoutée à une fonction déjà existante et il (devrait) tester des cas de bords compliqués. Donc, pour augmenter l'erreur dans l'application, j'aurais besoin d'implémenter la détection et la gestion de cas de bord en premier. Je me rends compte que ce n'est pas une procédure TDD correcte, car cela rend le "test case" plus d'une tâche et un rappel que ce test est toujours manquant qu'un test réel. – m00am

Répondre

2

Qu'en est-

import unittest 

class GenercTest(unittest.TestCase): 

    def test_stuff(self): 
     """I'll fill this in when I come around to it.""" 
     raise unittest.SkipTest("IKnowThisWillFail") 

votre système CI probablement peut faire la différence entre les tests sautées et échoué

+1

Merci, c'est ce que je cherchais. – m00am

0
try: 
    # code 
except IKnowThisWillFailError: 
    pass 
except: 
    # catch 
+0

Bienvenue sur SO. Malheureusement, cela n'aide pas mon problème :(Mais comme un indice général pour répondre à la question sur ce site: réponse sans code sans explication sont de mauvaises réponses sur SO (voir [cette question meta] (https: //meta.stackoverflow. com/questions/256359/flag-try-ce-code-réponses-as-very-low-quality? lq = 1) pour référence). En ajoutant des explications à vos réponses, ils deviennent plus lisibles et accessibles ce qui augmente vos chances d'obtenir – m00am