Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Como eu faço para testar um método protegido?

Para testar um método especifico do meu programa eu fiz isso:

def output_do_confirmar_os_itens():
    valor = Decimal(1)
    base = InfoGastos('q', valor, 1, '1/1/1')
    return base._confirmar_os_itens()

Mas dessa maneira eu quebrei a proteção dada ao método. Tem outra forma de fazer esse teste?

4 respostas

Faaala Daniel, tudo bem?

Como você está acessando esse método _confirmar_os_itens fora da classe, vale a reflexão: "esse método será utilizado somente dentro da classe ou fora dela?" Caso seja utilizado somente dentro da classe, como uma espécie de "ponte" para outros métodos, coloque-o "privado", em caso contrário, onde precise acessá-lo fora da classe torne-o público, retirando o underscore. Tudo bem?

Qualquer coisa é só falar, a gente vai conversando. Abraços e bons estudos!

Opa Nádia, bão?

Então, esse método é só usado dentro da classe mesmo, mas eu usei ele fora para testa-lo e ver se todas as ocorrências funcionariam, ai eu não sei se é ok puxar ele da forma que eu fiz.

solução!

Bãaooo uai hahaha

Não é ok, porque da forma que você fez, invocando esse método mesmo que para teste, quebra o encapsulamento, é como você disse "quebrou a proteção". E em um cenário onde você vai sempre testar se as ocorrências estão corretas, recomendo que você torne esse método público, pois irá utilizá-lo fora da classe em algum momento. Se tem uma razão para você utilizá-lo fora, mesmo que em grande maioria você o utilize internamente, ele tem que ser público.

Não sei o que te retorna o método _confirmar_os_itens, mas dependendo como está implementado, o que você pode fazer é retornar uma exception caso não esteja correta confirmação dos itens e chamar esse método dentro da inicialização da classe. Por exemplo:

class InfoGastos:

    def __init__(self, tipo, valor, numero, data):
        self.tipo = tipo
        self.valor = valor
        self.numero = numero
        self.data = data
        self._confirmar_os_itens()

    def _confirmar_os_itens(self):
        if self.tipo != 'q' or self.valor <= 0:
            raise Exception('Os itens não estão corretos, há valores inadequados')

base = InfoGastos('q', 0, 1, '1/1/1')

Dessa maneira, sempre quando você criar um objeto, irá testar se os itens estão corretos e caso não esteja, o programa irá liberar uma exceção dizendo que os valores são inadequados.

Thanks!!!! :D

Com isso já dá pra melhorar meu código. Até mais e abraços \o