Questão FC331207
Considere o seguinte trecho de código que representa uma classe em Python para cálculos contábeis (classe Contabil) com um método de cálculo de taxa de juros simples. Considere tam
Linguagens de Programação
FGV · 2014
Considere o seguinte trecho de código que representa uma classe em Python para cálculos contábeis (classe Contabil) com um método de cálculo de taxa de juros simples. Considere também uma classe para testes unitários (classe TesteContabil). Um teste falha se a condição lógica a ser testada for falsa e passa caso contrário. O método assertEqual testa se um parâmetro é igual a um segundo, enquanto assertRaises testa se uma Exception em Python está sendo lançada.
import unittest
class Contabil:
def taxa_juros(self, vf, vp, n):
i = ((vf/vp) - 1 ) / (n * 1.0)
return i
class TesteContabil(unittest.TestCase):
def setUp(self):
self.contabil = Contabil()
def test_1(self):
self.assertEqual( self.contabil.taxa_juros(1000,10,10), 0)
def teste_2(self):
self.assertRaises(TypeError,lambda: self.contabil.taxa_juros("10",23,22))
def teste_3(self):
self.assertRaises(ZeroDivisionError, lambda:
self.contabil.taxa_juros(10,23,0))
if __name__ == '__main__':
unittest.main()
Com base nesse código, é possível afirmar que, uma vez executado o código de testes:
- nenhum teste falhará;
- todos os testes falharão;
- o teste test_1 não falhará, os testes teste_2 e teste_3 irão falhar;
- os testes teste_2 e teste_3 não falharão e o teste_1 falhará;
- os testes teste_3 e teste_1 não falharão e o teste_2 irá falhar.
Mostrar resposta e comentário
Gabarito
D
Comentário do professor
Ao chamar self.contabil.taxa_juros(1000,10,10), o parâmetro self é implícito e os argumentos mapeiam para vf=1000, vp=10, n=10.
Para o teste_1, a expressão retorna \(i = ((1000/10)-1)/(10*1.0) = (100-1)/10.0 = 99/10.0 = 9.9\). O teste espera 0, portanto há discrepância e o teste falha.
No teste_2, a chamada é taxa_juros("10",23,22). Tentar dividir a string "10" por um número em Python provoca um TypeError. Como o teste usa assertRaises(TypeError,...), essa exceção é a esperada e o teste passa.
No teste_3, com n=0 o denominador é \(0*1.0 = 0.0\), levando a uma divisão por zero e gerando um ZeroDivisionError. O teste usa assertRaises(ZeroDivisionError,...), logo passa.
Conclusão: teste_2 e teste_3 não falharão e teste_1 falhará.
Conteúdo do catálogo FC Concursos · Atualizado em