2010-05-20 8 views
1

Je suis runninig test avec Python Unittest. J'exécute des tests mais je veux faire des tests négatifs et je voudrais tester si un jet de fonction est une exception, ça passe mais si aucune exception n'est levée, le test échoue. Le script que j'ai est:Test avec Unittest Python

try: 
     result = self.client.service.GetStreamUri(self.stream, self.token) 
     self.assertFalse 
    except suds.WebFault, e:       
     self.assertTrue 
    else: 
     self.assertTrue 

passe de ce alway comme vrai, même si parfaitement est le travail de la fonction. J'ai également essayé de diverses autres manières dont:

try: 
     result = self.client.service.GetStreamUri(self.stream, self.token) 
     self.assertFalse 
    except suds.WebFault, e:       
     self.assertTrue 
    except Exception, e: 
     self.assertTrue 

Quelqu'un a-t-il des suggestions?

Merci

J'ai essayé assertRaises sans chance.

try: 
     result = self.client.service.GetStreamUri(self.stream, self.token) 
     self.assertRaises(WebFault) 
    except suds.WebFault, e:       
     self.assertFalse 
    except Exception, e:       
     self.assertTrue 

Il passe toujours. Pour une raison quelconque, il n'essaie pas de faire l'instruction assertRaises. J'ai aussi essayé: (La fonction doit échouer, mais le test doit passer)

try: 
     result = self.client.service.GetStreamUri(self.stream, self.token) 

    except suds.WebFault, e:       
     self.assertFalse 
    except Exception, e:       
     self.assertTrue 
    else: 
     self.assertFalse 

Pour une raison quelconque, même lorsque la fonction transmet ne déclenche pas d'erreur. C'est toujours ce qui va à l'exception. À moins qu'il y ait une autre déclaration, alors ça va à ça.

a trouvé une façon que son travail, mais il semble est une très mauvaise façon de faire les choses:

Quelqu'un peut-il suggérer un moyen plus propre de le faire?

try: 
     result = self.client.service.GetStreamUri(self.stream, self.token) 

    except suds.WebFault, e:       
     self.assertFalse 
    except Exception, e: 
     pass 

    try: 
     result==result 
    except: 
     result=None 
    if result==None: 
     assert True 
    else: 
     assert False 
+0

La documentation python pour assertRaises est bonne, et il y a un exemple sur la façon de l'utiliser. PS: http://www.angryflower.com/bobsqu.gif –

Répondre

4

TestCase.assertRaises est ce dont vous avez besoin mais dans votre exemple, vous semblez être abusant légèrement. Vous avez besoin de quelque chose comme:

def test_GetStreamUri(self): 
    self.assertRaises(WebFault, self.client.service.GetStreamUri) 
    result = self.client.service.GetStreamUri(self.stream, self.token) 

Vous devez dire unittest sur le appelable la soulèvera l'exception avant que vous invoquez le appelable.

0

Vous devriez peut-être appeler self.assertTrue(True) et self.assertFalse(True), parce que vous n'appelez pas vraiment les fonctions maintenant, juste en les référençant. Pourtant, il doit y avoir une façon plus propre de le faire.

Questions connexes