2013-02-21 3 views
13

Я новичок в pytest и пытаюсь преобразовать некоторые функциональные тестовые скрипты в те, которые хорошо играют с pytest. Мой модуль имеет собственные типы ошибок, и я пытаюсь использовать метод «pytest.raises() как excinfo». Это научный/числовой пакет, и мне нужно проверить, что определенные методы являются последовательными при вызове, поэтому я не могу просто перейти к материалам более низкого уровня. Спасибос использованием pytest.raises для отслеживания ожидаемой пользовательской ошибки

ответ

27

Что заставляет вас импортировать конкретное исключение и использовать его в своем заявлении withpytest.raises? Почему это не работает? Было бы более полезно, если бы вы могли более подробно рассказать о какой проблеме вы столкнулись.

# your code 

class CustomError(Exception): 
    pass 


def foo(): 
    raise ValueError('everything is broken') 

def bar(): 
    raise CustomError('still broken')  

#############  
# your test 

import pytest 
# import your module, or functions from it, incl. exception class  

def test_fooErrorHandling(): 
    with pytest.raises(ValueError) as excinfo: 
     foo() 
    assert excinfo.value.message == 'everything is broken' 

def test_barSimpleErrorHandling(): 
    # don't care about the specific message 
    with pytest.raises(CustomError): 
     bar() 

def test_barSpecificErrorHandling(): 
    # check the specific error message 
    with pytest.raises(MyErr) as excinfo: 
     bar() 
    assert excinfo.value.message == 'oh no!' 

def test_barWithoutImportingExceptionClass(): 
    # if for some reason you can't import the specific exception class, 
    # catch it as generic and verify it's in the str(excinfo) 
    with pytest.raises(Exception) as excinfo: 
     bar() 
    assert 'MyErr:' in str(excinfo) 
+2

Похоже, ваш последний 'с py.test.raises' должен быть' с pytest.raises' –

+0

@IanHunter обновляемой Теперь, благодаря (Вы можете сказать, что я до сих пор с помощью «py.test» версия:)) – pfctdayelise

+0

Для python3: 'assert str (excinfo.value) == 'все сломано'' – incognick

Смежные вопросы