2009-07-24 4 views
1

여러 스크립트에서 assert를 여러 번 사용하고 있는데 아래 작성한 함수 대신에 더 좋은 방법을 제안하는 사람이 있는지 궁금합니다.파이썬 assert 함수에 대한 제안

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

어설 션문에 어떤 문제가 있습니까? –

답변

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은 성능 저하를 최소화합니다. 불행히도 나는 한 번만 upvote 수 있습니다 :) –

+0

assert_str_validation은 assert_validation (str (예상), str (실제), ...)이어야하며 str 매개 변수는 사용되지 않고 제거 될 수 있습니다. –

+0

사실 그것은'assert m [type] (str (expected), str (actual)) ... '이어야하고'assert_validation'의 str은 더 잘 명명 될 수 있지만 그저 질책하는 것입니다. –