Вы не можете использовать ExceptionInfo
внутри контекста with pytest.raises
. Запустите код, который ожидается поднять в контексте, работайте с информацией об исключении за пределами:
with pytest.raises(InvAmtValError) as e:
invoices = InvoiceStats()
invoices.addInvoice(-1.2)
assert str(e) == 'The invoice amount(s) -1.2 is invalid since it is < $0.00'
assert e.type == InvAmtValError # etc
Однако, если вы просто хотите утвердить сообщение об исключении, то идиоматический способ будет передавать ожидаемое сообщение прямо к pytest.raises
:
expected = 'The invoice amount(s) -1.2 is invalid since it is < $0.00'
with pytest.raises(InvAmtValError, message=expected):
invoices = InvoiceStats()
invoices.addInvoice(-1.2)
expected = 'The invoice amount(s) 100000000.1 is invalid since it is > $100,000,00.00'
with pytest.raises(InvAmtValError, message=expected):
invoices = InvoiceStats()
invoices.addInvoice(100000000.1)
UPDATE. Пробовал предложенное решение, получил:
blockquote>> invoices.addInvoice(-1.2) E Failed: DID NOT RAISE
Это потому, что исключение действительно не выражено в методе
addInvoice
- оно поднимается внутри блокаtry
и сразу же выставляется после этого. Либо полностью удалите блокtry
, либо выполните ререйз исключения:try: raise InvAmtValError(amount) except InvAmtValError as e: print(str(e)) raise e
Надеясь, это может кому-то помочь. Каким-то образом я не смог заставить CLSLogv
работать. В итоге я создал объект NSError и записал его в Crashlytics
в блоке catch.
catch Exceptions.SQLiteError(let error) {
let userInfo = [NSLocalizedDescriptionKey: error.message, "query": error.query]
let errorObj = NSError(domain: "sqlite", code: 400, userInfo: userInfo)
Crashlytics.sharedInstance().recordError(errorObj)
}