Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions exercicios/para-casa/Biblioteca.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from Livro import Livro

class Biblioteca :
def __init__(self):
self.livros = [] # propriedade declarada

def adicionar_livro(self, livro: Livro): # o parametrô livro é do tipo classe Livro
# raise NotImplementedError -> não precisamos mais do método de exceção pois agora temos um comportamento:
if (not isinstance(livro, Livro)):
raise TypeError('mensagem de erro')
self.livros.append(livro)

def exibir_livro(self, livro: Livro):
# raise NotImplementedError
self.livros = []
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui nessa linha, vc estaria limpando a a lista de livros toda vez que vai exibir os livros, talvez isso não seja necessário aqui (mas poderia ter um método de exclui_todos_livros, talvez? pode ser interessante)

Aqui bastaria retornar a lista como ela se encontra mesmo ☺️

print(livro)

def emprestar_livro(self):
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui está no caminho certo!

Mas que acha dessa sugestão de algoritmo?

  • receber um livro ou nome de um livro como parametro do metodo emprestar_livro
  • iterar sobre a lista self.livros (fazer um for)
  • verificar se o livro atual do for tem o mesmo nome do parametro recebido
    • Se tiver o mesmo nome então altera o valor do livro de dentro da lista para livro.esta_Emprestado = True (opcionalmente vc pode retornar True também, isso pode facilitar os testes)
    • Se não tiver o mesmo nome então não faz nada (opcionalmente vc pode retornar False também, isso pode facilitar os testes)

if self.emprestar_livro is False:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aqui vc está fazendo uma coisa interessante, vc já viu o conceito de recursividade ou recursão?
Aqui vc está usando esse conceito chamando o método dentro dele mesmo

Um site que ajuda muito a entender a lógica é o https://pythontutor.com/
Nesse site vc consegue fazer teste de mesa e ir debugando o código

return

self.emprestar_livro = True
print('O livro {} não está disponível para empréstimo')
# raise NotImplementedError

5 changes: 5 additions & 0 deletions exercicios/para-casa/Livro.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Livro:
def __init__(self, nome, autor, emprestado = False): # parâmetros que a classe vai receber
self.nome = nome
self.autor = autor
self.esta_Emprestado = emprestado # valor padrão do começo
1 change: 1 addition & 0 deletions exercicios/para-casa/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#Arquivo que faz com que o python consiga enxergar os arquivos como módulos
66 changes: 66 additions & 0 deletions exercicios/para-casa/testBiblioteca.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from unittest import TestCase #Desta forma, importamos apenas o TestCase dentro de tudo que tem no unittest
from Biblioteca import Biblioteca
from Livro import Livro

class TestBiblioteca(TestCase): #Especificamos que essa classe irá conter testes
def setUp(self):
self.biblioteca = Biblioteca()
# self.livro = Livro()

def test_init_deve_passar(self): #Precisamos começar os casos de teste sempre com o prefixo test
#Arrange -> queremos chamar a nossa Biblioteca / Act
# biblioteca = Biblioteca()
#Assert
self.assertIsInstance(self.biblioteca.livros, list)

def test_adicionar_livro_deve_passar(self):
#Arrange
# biblioteca = Biblioteca()
nome_livro = 'A coragem de ser imperfeito'
autor_livro = 'Brené Brown'
livro = Livro(nome = nome_livro, autor = autor_livro)
self.biblioteca.adicionar_livro(livro)
# neste momento foi preciso importar a classe Livro
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Muito bacana que utilizou comentários para se organizar e documentar o que está sendo feito no código!

# adicionei os parâmetros que ele espera
#Act
# biblioteca.adicionar_livro(livro)
# chamamos a biblioteca.adicionar_livro e esperamos receber um livro
# após criar as variáveis nome_livro, autor_livro e livro, inserimos estas variáveis no nosso método adicionar_livro
#Assert
self.assertEqual(1, len(self.biblioteca.livros)) # esperamos que o tamanho da nossa lista de livros seja 1 pois adicionamos 1 livro até aqui
# ao rodar o teste com esse método pela primeira vez, caímos no erro NotImplementedError

def test_adicionar_livro_nao_deve_inserir_numero(self):
#Arrange
# biblioteca = Biblioteca()
livro = 1988
#Act
# inicialmente o teste passou mesmo o valor atríbuido à variável livro sendo um número
#Assert
# self.assertRaises()
with self.assertRaises(TypeError):
self.biblioteca.adicionar_livro(livro)

def test_exibir_livro_deve_passar(self):
#Arrange
livro_nome = 'A pedagogia do oprimido'
livro_autor = 'Paulo Freire'
livro = Livro(livro_nome, livro_autor)
self.biblioteca.adicionar_livro(livro)
#Act
self.biblioteca.exibir_livro(livro)
#Assert
self.assertEqual(livro_nome, 'A pedagogia do oprimido')
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<3

self.assertEqual(livro_autor, 'Paulo Freire')

def test_livro_esta_emprestado(self):
self.biblioteca.emprestar_livro()
#Arrange
# self.livro = Livro(nome='Dom Casmurro', autor='Machado de Assis', emprestado=True)
self.nome = 'Dom Casmurro'
self.autor = 'Machado de Assis'
self.esta_Emprestado = True
#Act
# quero saber se o livro está emprestado
#Assert
self.assertTrue(self.esta_Emprestado)
15 changes: 15 additions & 0 deletions exercicios/para-casa/testLivro.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from unittest import TestCase
from Livro import Livro

class TestLivro(TestCase):
def test_init_deve_passar(self):
#Arrange # configuração
nome = 'A pedagogia da autonomia'
autor = 'Paulo Freire'

#Act
livro = Livro(nome, autor) # temos uma variável livro do tipo Livro
#Assert
self.assertEqual(nome, livro.nome)
self.assertEqual(autor, livro.autor)
self.assertEqual(False, livro.esta_Emprestado)