2009-07-24 13 views
1

J'utilise affirmer plusieurs fois à travers plusieurs scripts, je me demandais si quelqu'un a des suggestions sur une meilleure façon d'y parvenir au lieu des fonctions que j'ai créées ci-dessous.Suggestions pour la fonction assert python

def assert_validation(expected, actual, type='', message=''): 

    if type == '==': 

     assert expected == actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 

    elif type == '!=': 

     assert expected != actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 

    elif type == '<=': 

     assert expected <= actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 

    elif type == '>=': 

     assert expected >= actual, 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 



def assert_str_validation(expected, actual, type='', message=''): 

    if type == '==': 

     assert str(expected) == str(actual), 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 

    elif type == '!=': 

     assert str(expected) != str(actual), 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 

    elif type == '<=': 

     assert str(expected) <= str(actual), 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 

    elif type == '>=': 

     assert str(expected) >= str(actual), 'Expected: %s, Actual: %s, %s' %(expected, actual, message) 
+0

Refactor! _____ –

+0

Sérieusement, pouvez-vous expliquer le contexte? Je suis confus quant à la raison pour laquelle vous avez des cas pour '<=' and '> =' ainsi que '! ='. –

+0

Quel est le problème avec l'instruction assert? –

Répondre

11

Eh bien, c'est certainement plus court ... vous pouvez vraiment pas simplement utiliser assert expected == actual ou quoi que dans les scripts eux-mêmes?

def assert_validation(expected, actual, type='', message='', trans=(lambda x: x)): 
    m = { '==': (lambda e, a: e == a), 
      '!=': (lambda e, a: e != a), 
      '<=': (lambda e, a: e <= a), 
      '>=': (lambda e, a: e >= a), } 
    assert m[type](trans(expected), trans(actual)), 'Expected: %s, Actual: %s, %s' % (expected, actual, message) 

def assert_str_validation(expected, actual, type='', message=''): 
    assert_validation(expected, actual, type, message, trans=str) 
+0

Devrait être +1 pour la première phrase. +1 pour résoudre réellement le problème et +1 pour minimiser le coup de performance. Malheureuse- ment, je ne peux le mettre en valeur qu'une seule fois :) –

+0

assert_str_validation devrait être assert_validation (str (attendu), str (réel), ...) et le paramètre str est inutilisé et peut être supprimé. –

+0

En fait, il devrait être 'assert m [type] (str (attendu), str (réel)) ...', et str dans 'assert_validation' pourrait être mieux nommé, mais c'est juste nitpicking. –