2017-03-06 39 views
1

Pytest功能是否類似於pytest.raises,通過iff塊引發指定的異常,根本不會引發?喜歡的東西:py.test斷言可能會提高,如果它提出它將__

def test_encode_err(ulist): 
    with pytest.maybe_raises_but_only(UnicodeEncodeError): # <== ? 
     assert encode_list(ulist, 'ascii') == map(lambda x:x.encode('ascii'), ulist) 

這個問題在以下情況下想出了..

功能測試:

def encode_list(lst, enc): 
    "Encode all unicode values in ``lst`` using ``enc``." 
    return [(x.encode(enc) if isinstance(x, unicode) else x) for x in lst] 

一些簡單的測試(以下夾具):

def test_encode_err(ulist): 
    with pytest.raises(UnicodeEncodeError): 
     assert encode_list(ulist, 'ascii') 

def test_encode_u8(ulist, u8list): 
    assert encode_list(ulist, 'u8') == u8list 

的燈具:

@pytest.fixture(
    scope='module', 
    params=[ 
     u'blåbærsyltetøy', 
     u'',    # <==== problem 
    ] 
) 
def ustr(request): 
    print 'testing with:', `request.param` 
    return request.param 

@pytest.fixture 
def u8str(ustr): 
    return ustr.encode('u8') 

@pytest.fixture 
def ulist(ustr): 
    return [ustr, ustr] 

@pytest.fixture 
def u8list(u8str): 
    return [u8str, u8str] 

指示<== problem僅供test_encode_err()(而不是test_encode_u8())問題,並且因爲u''.encode('ascii')發生不養UnicodeEncodeError(不包含上面的代碼點127個字符將募集不unicode字符串)。

有沒有覆蓋該用例py.test功能?

回答

3

如果當異常被拋出只是寫代碼爲正常,但把try...except擋輪它忽略錯誤不在乎。

def test_encode_err(ulist): 
    try: 
     assert encode_list(ulist, 'ascii') == map(lambda x:x.encode('ascii'), ulist) 
    except UnicodeDecodeError: 
     pass 

真的要考慮是否應該編寫一個測試,如果你不知道代碼是否會拋出異常。嘗試將數據更多地固定下來,並進行兩個測試,一個引發異常,另一個不引發異常。

相關問題