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

Exercicio

Bom dia,

Estou fazendo alguns exercícios que peguei lá no https://wiki.python.org.br/ e gostaria dá opinião de vocês sobre como estou resolvendo, tentei fazer Orientado a Objeto com um arquivo separado Main e com um teste, desde já agradeço a ajuda.

# Faça um Programa que pergunte quanto você ganha por hora...
# ...e o número de horas trabalhadas no mês. Calcule e mostre...
# ...o total do seu salário no referido mês.

#Arquivo Salario.py

class Salario:

    def __init__(self, ganho_hora, horas_mes):
        self.__ganho_hora = ganho_hora
        self.__horas_mes = horas_mes

    def salario_mes(self):
        salario_mes = self.__ganho_hora * self.__horas_mes
        return salario_mes
#Arquivo Salario_Main.py

from EstruturaSequencial.Salario import Salario

ganho_hora = float(input("Quanto ganha por hora trabalhada: "))
horas_mes = float(input("Quantas horas você trabalha por mes: "))

objeto_salario = Salario(ganho_hora, horas_mes)

salario_mes = objeto_salario.salario_mes()

print(f"Seu salario esté mes será R${salario_mes}")
#Arquivo test_Salario.py

from unittest import TestCase
from EstruturaSequencial.Salario import Salario


class TestSalario(TestCase):

    def test_deve_passar_com_salario_mes_igual_a_um(self):
        objeto_salario = Salario(1, 1)
        salario_mes = objeto_salario.salario_mes()
        assert salario_mes == 1
2 respostas
solução!

Olá Igor.

Parabéns, gostei bastante da sua solução e tenho alguns pontos de melhora para você analisar.

  • Poderia seguir o GuiaDeEstilo e modificar os nomes para seguirem o padrão python. Por exemplo o nome de modulos:
    Nomes de Módulos
    Módulos devem ter nomes ou em PalavrasComeçandoPorMaíusculas ou totalmente_em_minúsculas
  • Outro ponto é o nome do teste, acho que ele poderia refletir melhor o que está sendo testado:
      def test_deve_retornar_o_calculo_do_salario_do_mes(self):
          objeto_salario = Salario(1, 1)
          salario_mes = objeto_salario.salario_mes()
          assert salario_mes == 1
    Nesse mesmo caminho poderia refatorar o nome do método da classe, incluindo um verbo nele:
      def calcula_salario_do_mes(self):
          salario_mes = self.__ganho_hora * self.__horas_mes
          return salario_mes
  • Você pode também refatorar o seu teste, deixando mais explicito como você está testando, para quem estiver lendo o seu teste não ter muito trabalho para entender.
      def test_deve_retornar_o_calculo_do_salario_do_mes(self):
          ganho_hora = 1
          hora_mes = 4
          resultado_esperado = ganho_hora * hora_mes
          objeto_salario = Salario(ganho_hora, hora_mes)
          salario_mes = objeto_salario.calcula_salario_do_mes()
          assert salario_mes == resultado_esperado
  • E o ultimo ponto é talvez criar mais testes, para outros cenários , atualmente você está testando apenas o caminho feliz. Poderia criar testes para ver o comportamento do seu código caso receba números negativos.

Esse pontos são apenas sugestões e são a minha opinião sobre o seu código, você pode segui-los ou não. E parabéns por expor seu código aqui no fórum, é sempre bom receber a visão de alguém externo e também discutir sobre pontos do código.

Bons Estudos.

Valeu xará pela resposta bem detalhada, já fiz a mudanças sugeridas também li o artigo GuiaDeEstilo, vi que estava misturando os estilos de padronização, e mais uma vez obrigado pela resposta detalha, fica na paz.