2017-08-14 37 views
3

我想確保在所有都沒有警告在一個斷言中引發。如何使用pytest聲明否提出警告

pytest documentation about warnings找不到任何明確的答案。

我試過這個,想也許None將意味着「無」:

def test_AttrStr_parse_warnings(): 
    """Check _AttrStr.parse() raises proper warnings in proper cases.""" 
    with pytest.warns(None): 
     _AttrStr('').parse() 

但這種說法也總是正確的,例如,測試不會失敗,即使警告實際募集:

def test_AttrStr_parse_warnings(): 
    """Check _AttrStr.parse() raises proper warnings in proper cases.""" 
    with pytest.warns(None): 
     _AttrStr('').parse() 
     warnings.warn('any message') 

回答

3

這是可能的「記錄」一切可能的警示提出,並以此來增加一個斷言,以確保提出警告的數量爲0

def test_AttrStr_parse_warnings(): 
    """Check parse() raises proper warnings in proper cases.""" 
    with pytest.warns(None) as record: 
     _AttrStr('').parse() 
    assert len(record) == 0 

爲了確保它的正常工作:在第二個斷言中添加warnings.warn('any message')讓測試失敗。

+0

甚至更​​漂亮:'assert not record.list'。 – krassowski