AttributeError: объект «ExceptionInfo» не имеет атрибута «traceback» при использовании pytest для утверждения исключений

Вы должны использовать следующие библиотеки в своем классе: onBackKeyPressed. canGoBack () проверяет, может ли веб-просмотр ссылаться на предыдущую страницу. Если это возможно, используйте функцию goBack () для ссылки на предыдущую страницу (вернитесь назад).

 @Override
        public void onBackPressed() {
          if( mWebview.canGoBack()){
               mWebview.goBack(); 
           }else{
            //Do something else. like trigger pop up. Add rate app or see more app
           }
  }
1
задан daiyue 13 July 2018 в 13:44
поделиться

1 ответ

Вы не можете использовать 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. Пробовал предложенное решение, получил:

>           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
1
ответ дан hoefling 17 August 2018 в 13:03
поделиться
  • 1
    попробовал 1-е и 2-е решения, но получил > invoices.addInvoice(-1.2) E Failed: DID NOT RAISE и > invoices.addInvoice(100000000.1) E Failed: DID NOT RAISE – daiyue 13 July 2018 в 13:27
  • 2
    Я изменил OP, я тестировал в классе Invoices, а не InvoiceStats, но все же получил вышеприведенное сообщение, и он должен поймать ошибку. – daiyue 13 July 2018 в 13:49
  • 3
    Я вижу это сейчас. Поведение вашего теста правильное. Взгляните на addInvoice еще раз - вы поднимаете исключение в блоке try, поэтому исключение поднимается и сразу же ловится, и выводится сообщение об ошибке. Если вы хотите, чтобы исключение было поднято в методе, либо полностью удалите блок try, либо добавьте raise e в исключающий блок для повторного исключения исключения уловов. – hoefling 13 July 2018 в 14:11
  • 4
    thx для этого ясного объяснения, я подозревал то же самое после прочтения некоторых других сообщений. – daiyue 13 July 2018 в 14:13
  • 5
    Рад, что смог помочь! Хорошая новость заключается в том, что писать тесты стоило того, в конце концов ;-) – hoefling 13 July 2018 в 14:23
Другие вопросы по тегам:

Похожие вопросы: