Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a12773f

Browse files
author
renzon
committed
Testes de fase divididos em integracao e unitários com Objetos Fake emulando Mock
(cherry picked from commit d5f5528)
1 parent 25e33ab commit a12773f

File tree

3 files changed

+297
-125
lines changed

3 files changed

+297
-125
lines changed

testes/fase_testes.py

+109-123
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# -*- coding: utf-8 -*-
2-
from itertools import chain
32

43
import os
4+
import sys
55
from os import path
66
from unittest.case import TestCase
7-
import math
8-
import sys
97

108
project_dir = path.dirname(__file__)
119
project_dir = path.join('..')
@@ -16,211 +14,199 @@
1614
project_dir = os.path.normpath(project_dir)
1715
sys.path.append(project_dir)
1816

19-
from atores import Obstaculo, Porco, PassaroVermelho, PassaroAmarelo, DESTRUIDO, ATIVO
17+
from atores import (Obstaculo, Porco, PassaroVermelho, PassaroAmarelo,
18+
DESTRUIDO, ATIVO, DuploLancamentoExcecao)
2019
from fase import Fase, Ponto, EM_ANDAMENTO, VITORIA, DERROTA
2120

2221

22+
class AtorFake:
23+
def __init__(self, x=0, y=0):
24+
self.y = y
25+
self.x = x
26+
self.status = ATIVO
27+
self.colidir_executado = False
28+
self.calcular_posicao_executado = False
29+
self.intervalo_colisao = None
30+
31+
def calcular_posicao(self, tempo):
32+
self.calcular_posicao_executado = True
33+
34+
def colidir(self, outro_ator, intervalo):
35+
self.colidir_executado = outro_ator.colidir_executado = True
36+
self.intervalo_colisao = outro_ator.intervalo_colisao = intervalo
37+
38+
def caracter(self):
39+
return ' '
40+
41+
42+
class ObstaculoFake(AtorFake):
43+
pass
44+
45+
46+
class PorcoFake(AtorFake):
47+
pass
48+
49+
50+
class PassaroFake(AtorFake):
51+
def __init__(self, x=0, y=0):
52+
super().__init__(x, y)
53+
self._lancado = False
54+
self.colidir_com_chao_executado = False
55+
56+
def foi_lancado(self):
57+
return self._lancado
58+
59+
def lancar(self, angulo, tempo):
60+
if self._lancado:
61+
raise DuploLancamentoExcecao()
62+
self._lancado = True
63+
64+
def colidir_com_chao(self):
65+
self.colidir_com_chao_executado = True
66+
67+
2368
class FaseTestes(TestCase):
2469
def teste_adicionar_obstaculo(self):
2570
fase = Fase()
2671
self.assertListEqual([], fase._obstaculos)
27-
obstaculo = Obstaculo()
72+
obstaculo = ObstaculoFake()
2873
fase.adicionar_obstaculo(obstaculo)
2974
self.assertListEqual([obstaculo], fase._obstaculos)
3075

31-
obstaculo1, obstaculo2 = Obstaculo(), Obstaculo()
76+
obstaculo1, obstaculo2 = ObstaculoFake(), ObstaculoFake()
3277
fase.adicionar_obstaculo(obstaculo1, obstaculo2)
33-
self.assertListEqual([obstaculo, obstaculo1, obstaculo2], fase._obstaculos)
78+
self.assertListEqual([obstaculo, obstaculo1, obstaculo2],
79+
fase._obstaculos)
3480

3581
def teste_adicionar_porco(self):
3682
fase = Fase()
3783
self.assertListEqual([], fase._porcos)
38-
porco = Porco()
84+
porco = PorcoFake()
3985
fase.adicionar_porco(porco)
4086
self.assertListEqual([porco], fase._porcos)
4187

42-
porco1, porco2 = Porco(), Porco()
88+
porco1, porco2 = PorcoFake(), PorcoFake()
4389
fase.adicionar_porco(porco1, porco2)
4490
self.assertListEqual([porco, porco1, porco2], fase._porcos)
4591

4692
def teste_adicionar_passaro(self):
4793
fase = Fase()
4894
self.assertListEqual([], fase._passaros)
49-
passaro = PassaroVermelho()
95+
passaro = PassaroFake()
5096
fase.adicionar_passaro(passaro)
5197
self.assertListEqual([passaro], fase._passaros)
5298

53-
passaro1, passaro2 = PassaroVermelho(), PassaroAmarelo()
99+
passaro1, passaro2 = PassaroFake(), PassaroFake()
54100
fase.adicionar_passaro(passaro1, passaro2)
55101
self.assertListEqual([passaro, passaro1, passaro2], fase._passaros)
56102

57-
58103
def teste_acabou_sem_porcos(self):
59104
fase = Fase()
60105
self.assertEqual(VITORIA, fase.status())
61106

62107
def teste_acabou_com_porcos_e_passaros(self):
63108
fase = Fase()
64-
porcos = [Porco(1, 1) for i in range(2)] # criando 2 porcos
65-
passaros = [PassaroAmarelo(1, 1) for i in range(2)] # criando 2 pássaros
109+
porcos = [PorcoFake(1, 1) for _ in range(2)] # criando 2 porcos
110+
passaros = [PassaroFake(1, 1) for _ in range(2)] # criando 2 pássaros
66111
fase.adicionar_porco(*porcos)
67112
fase.adicionar_passaro(*passaros)
68113

69114
self.assertEqual(EM_ANDAMENTO, fase.status())
70115

71-
# colidindo cada passaro com um porco no tempo 3
72-
for passaro, porco in zip(passaros, porcos):
73-
passaro.colidir(porco, 3)
74-
116+
for ator in porcos + passaros:
117+
ator.status = DESTRUIDO
75118
self.assertEqual(VITORIA, fase.status())
76119

77120
fase.adicionar_obstaculo(Obstaculo())
78-
self.assertEqual(VITORIA, fase.status(), 'Obstáculo não interfere no fim do jogo')
121+
self.assertEqual(VITORIA, fase.status(),
122+
'Obstáculo não interfere no fim do jogo')
79123

80-
fase.adicionar_porco(Porco())
81-
self.assertEqual(DERROTA, fase.status(), 'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar')
124+
fase.adicionar_porco(PorcoFake())
125+
self.assertEqual(DERROTA, fase.status(),
126+
'Com Porco ativo e sem pássaro para lançar, o jogo '
127+
'deveria acabar')
82128

83-
fase.adicionar_passaro(PassaroAmarelo())
129+
fase.adicionar_passaro(PassaroFake())
84130
self.assertEqual(EM_ANDAMENTO, fase.status(),
85-
'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar')
131+
'Com Porco ativo e com pássaro para lançar, o jogo '
132+
'não deveria acabar')
86133

87134
def teste_status(self):
88135
fase = Fase()
89-
porcos = [Porco(1, 1) for i in range(2)]
90-
passaros = [PassaroAmarelo(1, 1) for i in range(2)]
136+
porcos = [PorcoFake(1, 1) for _ in range(2)]
137+
passaros = [PassaroFake(1, 1) for _ in range(2)]
91138
fase.adicionar_porco(*porcos)
92139
fase.adicionar_passaro(*passaros)
93140
self.assertEqual(EM_ANDAMENTO, fase.status())
94141

95-
for passaro, porco in zip(passaros, porcos):
96-
passaro.colidir(porco, 3)
97-
142+
for ator in porcos + passaros:
143+
ator.status = DESTRUIDO
98144
self.assertEqual(VITORIA, fase.status(),
99-
'Sem porcos ativos o jogo deveria terminar com vitória')
145+
'Sem porcos ativos o jogo deveria terminar com '
146+
'vitória')
100147

101-
fase.adicionar_obstaculo(Obstaculo())
148+
fase.adicionar_obstaculo(ObstaculoFake())
102149
self.assertEqual(VITORIA, fase.status(),
103150
'Obstáculo não interfere para definir vitória')
104151

105-
porco = Porco()
152+
porco = PorcoFake()
106153
fase.adicionar_porco(porco)
107154
self.assertEqual(DERROTA, fase.status(),
108-
'Com Porco ativo e sem pássaro para lançar, o jogo deveria acabar em derrota')
155+
'Com Porco ativo e sem pássaro para lançar, o jogo '
156+
'deveria acabar em derrota')
109157

110-
fase.adicionar_passaro(PassaroAmarelo())
158+
fase.adicionar_passaro(PassaroFake())
111159
self.assertEqual(EM_ANDAMENTO, fase.status(),
112-
'Com Porco ativo e com pássaro para lançar, o jogo não deveria acabar')
160+
'Com Porco ativo e com pássaro para lançar, o jogo '
161+
'não deveria acabar')
113162

114-
porco.colidir(porco, 3)
163+
porco.status = DESTRUIDO
115164
self.assertEqual(VITORIA, fase.status(),
116165
'Sem porco ativo, o jogo deveria acabar com vitória')
117166

118167
def teste_lancar_passaro_sem_erro_quando_nao_existe_passaro(self):
119-
passaro_vermelho, passaro_amarelo = PassaroVermelho(1, 1), PassaroAmarelo(1, 1)
168+
passaros = [PassaroFake(1, 1) for _ in range(2)]
120169
fase = Fase()
121-
fase.adicionar_passaro(passaro_vermelho, passaro_amarelo)
122-
self.assertFalse(passaro_vermelho.foi_lancado())
123-
self.assertFalse(passaro_amarelo.foi_lancado())
170+
fase.adicionar_passaro(*passaros)
171+
self.assertFalse(passaros[0].foi_lancado())
172+
self.assertFalse(passaros[1].foi_lancado())
124173
fase.lancar(90, 1)
125174
fase.lancar(45, 3)
126-
fase.lancar(31, 5) # testando que lançar passaros depios de todos lançados não causa erro
175+
fase.lancar(31,
176+
5) # testando que lançar passaros depios de todos
177+
# lançados não causa erro
127178

128-
self.assertTrue(passaro_vermelho.foi_lancado())
129-
self.assertEqual(math.radians(90), passaro_vermelho._angulo_de_lancamento)
130-
self.assertEqual(1, passaro_vermelho._tempo_de_lancamento)
131-
132-
self.assertTrue(passaro_amarelo.foi_lancado())
133-
self.assertEqual(math.radians(45), passaro_amarelo._angulo_de_lancamento)
134-
self.assertEqual(3, passaro_amarelo._tempo_de_lancamento)
179+
self.assertTrue(passaros[0].foi_lancado())
180+
self.assertTrue(passaros[1].foi_lancado())
135181

136182
def teste_intervalo_de_colisao_padrão(self):
137183
'''
138-
Método que testa se o intervalo de colisão da Fase é repassado aos atores. Padrão de intervalo é 1
184+
Método que testa se o intervalo de colisão da Fase é repassado aos
185+
atores. Padrão de intervalo é 1
139186
'''
140187
fase = Fase()
141-
passaro = PassaroAmarelo(1, 1)
188+
passaro = PassaroFake(1, 1)
142189
fase.adicionar_passaro(passaro)
143-
porco = Porco(2, 2)
190+
porco = PorcoFake(2, 2)
144191
fase.adicionar_porco(porco)
145192
fase.calcular_pontos(0)
146-
self.assertEqual(DESTRUIDO, passaro.status)
147-
self.assertEqual(DESTRUIDO, porco.status)
193+
self.assertTrue(passaro.colidir_executado)
194+
self.assertTrue(porco.colidir_executado)
195+
self.assertTrue(passaro.calcular_posicao_executado)
196+
self.assertTrue(passaro.colidir_com_chao_executado)
197+
self.assertEqual(1, passaro.intervalo_colisao)
198+
self.assertEqual(1, porco.intervalo_colisao)
148199

149200
def teste_intervalo_de_colisao_nao_padrao(self):
150201
'''
151-
Método que testa se o intervalo de colisão da Fase é repassado aos atores. valor testado: 31
202+
Método que testa se o intervalo de colisão da Fase é repassado aos
203+
atores. valor testado: 31
152204
'''
153205
fase = Fase(30)
154-
passaro = PassaroAmarelo(1, 1)
206+
passaro = PassaroFake(1, 1)
155207
fase.adicionar_passaro(passaro)
156-
porco = Porco(31, 31)
208+
porco = PorcoFake(31, 31)
157209
fase.adicionar_porco(porco)
158210
fase.calcular_pontos(0)
159-
self.assertEqual(DESTRUIDO, passaro.status)
160-
self.assertEqual(DESTRUIDO, porco.status)
161-
162-
def teste_calcular_pontos(self):
163-
fase_exemplo = criar_fase_exemplo()
164-
expected = set([Ponto(3, 3, 'A'), Ponto(3, 3, 'A'), Ponto(31, 10, 'O'), Ponto(78, 1, '@'),
165-
Ponto(70, 1, '@'), Ponto(3, 3, 'V')])
166-
self.assertSetEqual(expected, set(fase_exemplo.calcular_pontos(0)))
167-
168-
fase_exemplo.lancar(45, 1)
169-
170-
# i variando de 1 até 2.9
171-
for i in range(100, 300, 1):
172-
fase_exemplo.calcular_pontos(i / 100)
173-
174-
fase_exemplo.lancar(63, 3)
175-
176-
# i variando de 3 até 3.9
177-
for i in range(300, 400, 1):
178-
fase_exemplo.calcular_pontos(i / 100)
179-
180-
fase_exemplo.lancar(23, 4)
181-
182-
expected = set([Ponto(32, 11, 'v'), Ponto(17, 25, 'A'), Ponto(3, 3, 'A'), Ponto(31, 10, ' '), Ponto(78, 1, '@'),
183-
Ponto(70, 1, '@')])
184-
185-
self.assertSetEqual(expected, set(fase_exemplo.calcular_pontos(4)))
186-
187-
# i variando de 4 até 6.9
188-
for i in range(400, 700, 1):
189-
fase_exemplo.calcular_pontos(i / 100)
190-
191-
expected = set(
192-
[Ponto(32, 11, 'v'), Ponto(57, 30, 'A'), Ponto(70, 2, 'a'), Ponto(31, 10, ' '), Ponto(78, 1, '@'),
193-
Ponto(70, 1, '+')])
194-
195-
self.assertSetEqual(expected, set(fase_exemplo.calcular_pontos(7)))
196-
197-
# i variando de 7 até 8.49
198-
for i in range(700, 849, 1):
199-
fase_exemplo.calcular_pontos(i / 100)
200-
print(fase_exemplo.calcular_pontos(8.5))
201-
202-
expected = set([Ponto(32, 11, 'v'), Ponto(77, 0, 'a'), Ponto(70, 2, 'a'), Ponto(31, 10, ' '), Ponto(78, 1, '+'),
203-
Ponto(70, 1, '+')])
204-
205-
self.assertSetEqual(expected, set(fase_exemplo.calcular_pontos(8.5)))
206-
207-
self.assertEqual(VITORIA, fase_exemplo.status())
208-
209-
210-
def criar_fase_exemplo(multiplicador=1):
211-
fase_exemplo = Fase(1 if multiplicador == 1 else 32)
212-
passaros = [PassaroVermelho(3 * multiplicador, 3 * multiplicador),
213-
PassaroAmarelo(3 * multiplicador, 3 * multiplicador),
214-
PassaroAmarelo(3 * multiplicador, 3 * multiplicador)]
215-
porcos = [Porco(78 * multiplicador, multiplicador), Porco(70 * multiplicador, multiplicador)]
216-
obstaculos = [Obstaculo(31 * multiplicador, 10 * multiplicador)]
217-
218-
fase_exemplo.adicionar_passaro(*passaros)
219-
fase_exemplo.adicionar_porco(*porcos)
220-
fase_exemplo.adicionar_obstaculo(*obstaculos)
221-
222-
return fase_exemplo
223-
224-
225-
if __name__ == '__main__':
226-
rodar_fase(criar_fase_exemplo(10))
211+
self.assertEqual(30, passaro.intervalo_colisao)
212+
self.assertEqual(30, porco.intervalo_colisao)

0 commit comments

Comments
 (0)