-
Notifications
You must be signed in to change notification settings - Fork 38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
✅ Finalizado projeto com unittest #37
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
from livro import Livro | ||
|
||
class Biblioteca: | ||
def __init__(self): | ||
self.livros = [] | ||
|
||
def adicionar_livro(self, livro: Livro): | ||
if (not isinstance(livro, Livro)): | ||
raise TypeError(f"Esperado livro obtido valor {livro} do tipo {type(livro)}") | ||
self.livros.append(livro) | ||
|
||
def exibir_livro(self): | ||
return self.livros | ||
|
||
def emprestar_livro(self, livro: Livro): | ||
if livro.esta_emprestado == True: | ||
return(f"O livro que você solicitou não está disponível") | ||
elif livro.esta_emprestado: | ||
return(f"O livro que você você solicitou está disponível") | ||
else: | ||
raise TypeError("Este livro não consta na nossa base de dados") |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
class Livro: | ||
def __init__(self, nome, autor): | ||
self.nome = nome | ||
self.autor = autor | ||
self.esta_emprestado = False |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
from unittest import TestCase | ||
from biblioteca import Biblioteca | ||
from livro import Livro | ||
|
||
class TestBiblioteca(TestCase): | ||
def setUp(self): | ||
self.biblioteca = Biblioteca() | ||
|
||
def test_init_deve_passar(self): | ||
|
||
#Assert | ||
self.assertIsInstance(self.biblioteca.livros, list) | ||
|
||
def test_adicionar_livro_deve_passar(self): | ||
#arrange | ||
nome_livro = "A Pequena Sereia e o Reino das Ilusões" | ||
nome_autor = "Louise O'Neil" | ||
livro = Livro(nome_livro, nome_autor) | ||
|
||
#act | ||
self.biblioteca.adicionar_livro(livro) | ||
|
||
#assert | ||
self.assertEqual(1, len(self.biblioteca.livros)) | ||
|
||
def test_adicionar_livro_nao_deve_inserir_numero(self): | ||
# Arrange | ||
livro = 1988 | ||
|
||
# Act / Assert | ||
with self.assertRaises(TypeError): | ||
self.biblioteca.adicionar_livro(livro) | ||
|
||
def test_exibir_livro(self): | ||
self.biblioteca.livros = "Jogador nº 1" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Muito interessante isso que vc fez! Isso expõe uma vulnerabilidade do nosso sistema de gerenciamento de bibliotecas, até o momento todo mundo usou o biblioteca.adicionar_livro(), sem questionar se seria possivel fazer de outra forma ao fazer isso vc inclusive alterou o tipo da propriedade de lista para string! Uma QA nata! achando brechas! |
||
self.assertEqual(self.biblioteca.exibir_livro(), "Jogador nº 1") | ||
|
||
def test_emprestar_livro(self): | ||
nome_livro = "O Guia do Mochileiro das Galáxias" | ||
nome_autor = "Douglas Adams" | ||
livro = Livro(nome_livro, nome_autor) | ||
livro.esta_emprestado = True | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Aah agora entendi que está alterando o valor de emprestado aqui no teste. Interessante, pode ser uma forma diferente de fazer, mas como a gente pode fazer a ligação o objeto livro criado aqui fora da biblioteca com o que está dentro da lista biblioteca.livros ? |
||
|
||
self.assertEqual(self.biblioteca.emprestar_livro(livro),f"O livro que você solicitou não está disponível") |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from unittest import TestCase | ||
from livro import Livro | ||
|
||
class TestLivro(TestCase): | ||
def test_init_deve_passar(self): | ||
#arrange | ||
nome = "Coraline" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. <3 |
||
autor = "Neil Gaiman" | ||
|
||
#act | ||
livro = Livro(nome, autor) | ||
|
||
#assert | ||
self.assertEqual(nome,livro.nome) | ||
self.assertEqual(autor,livro.autor) | ||
self.assertEqual(False,livro.esta_emprestado) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Esse método tem alguns ajustes a serem feitos na lógica:
if livro.emprestado == True
eelif livro.emprestado
são formas diferentes de fazer a mesma verificação, por isso o seu elif nunca vai ser alcançadoUm 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