Estou tentando testar se meu código retorna uma Exception personalizada, dentro do meu código. Como vimos no curso de tratamento de erros, podemos criar classes filhas de Exception e personalizar regras para disparo de erros. Segue o código da minha classe Exception:
class InsuffcientBalance(Exception):
message_default = "saldo insuficiente para operação"
def __init__(self, message_user = ""):
self.message = message_user or self.message_default
super(InsuffcientBalance, self).__init__(self.message)
Quando eu vou testar um método de saque num objeto conta corrente (CheckingAccount) minha aplicação tem que disparar um erro de saldo insuficiente (InsufficientBalance) se o valor do saque for maoir que o saldo da conta.
Porém quando eu executo o teste unitário dessa condição, o código do teste falha:
def test_when_withdraw_greater_than_balance_returns_insufficient_balance_error(self):
with pytest.raises(InsuffcientBalance):
client = Client(1, 'Maercio')
agency = Agency(1)
checking_account = CheckingAccount(client, agency)
# initial balance equal a zero
input_value_withdraw = 50
assert checking_account.withdraw(input_value_withdraw)
Mas quando eu uso o método pytest,raises, recebendo, como parâmetro, uma classe Exception, genérica, o teste funciona normalmente:
def test_when_withdraw_greater_than_balance_returns_insufficient_balance_error(self):
with pytest.raises(Exception):
client = Client(1, 'Maercio')
agency = Agency(1)
checking_account = CheckingAccount(client, agency)
# initial balance equal a zero
input_value_withdraw = 50
assert checking_account.withdraw(input_value_withdraw)
Minha dúvida é? o método pytest.raises sempre vai receber a classe Exception, como parâmetro ? como eu posso testar se minha classe Exceptiom personalizada está sendo executada como esperado?