2009-07-24 10 views
1

私は複数のスクリプトで複数回アサーションを使用していますが、以下で作成した関数の代わりに誰かがより良い方法でこれを達成するための提案をしているのだろうかと思いました。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

リファクタリング! _____ –

+0

真剣に、文脈を説明できますか?私はなぜ '<=' and '> ='と '!='の場合があるのか​​混乱しています。 –

+0

assertステートメントで何が問題になっていますか? –

答えて

11

まあ、これは確かに短いです...あなたは本当にただ、スクリプト自体はassert expected == actualまたは何を使用することはできませんか?

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

最初の文に+1する必要があります。実際に問題を解決するには+1し、パフォーマンスヒットを最小限に抑えるには+1します。 Unfortuneatly私はそれを一度だけupvoteすることができます:) –

+0

assert_str_validationはassert_validation(str(expected)、str(actual)、...)でなければならず、strパラメータは未使用であり、削除できます。 –

+0

実際には 'assert m [type](str(expected)、str(actual))...'でなければならず、 'assert_validation'のstrはより良い名前にすることができます。 –

関連する問題