77
88class AtorTestes (TestCase ):
99 def teste_valores_padrao (self ):
10+ 'Testa valores iniciais padrão de um Ator'
1011 ator = Ator ()
1112 self .assertEqual (0 , ator .x )
1213 self .assertEqual (0 , ator .y )
1314 self .assertEqual (ATIVO , ator .status )
1415 self .assertEqual ('A' , ator .caracter ())
1516
1617 def teste_valores_passados_por_parametro (self ):
18+ 'Testa se valores passados no inicializador são armazenados no objeto'
1719 ator = Ator (1 , 2 )
1820 self .assertEqual (1 , ator .x )
1921 self .assertEqual (2 , ator .y )
@@ -34,6 +36,12 @@ def teste_ator_posicao(self):
3436
3537
3638 def teste_colisao_entre_atores_ativos (self ):
39+ """
40+ Teste de colisão entre dois atores
41+ Incialmente atores possuem status ATIVO. Ao se chocarem, ele muda para Destruído
42+ A função assert_colisao_atores_ativos testa justamente se dois atore ativos se chocam quando estão em posições
43+ vizinhas.
44+ """
3745 ator = Ator (2 , 2 ) # Ator recém criado deve ter status ativo
3846 ator2 = Ator (2 , 2 )
3947 self .assert_colisao_atores_ativos (ator , ator2 )
@@ -51,6 +59,7 @@ def teste_colisao_entre_atores_ativos_com_intervalo(self):
5159 self .assert_colisao_atores_ativos (Ator (2 , 2 ), Ator (2 , 4 ), 2 )
5260
5361 def teste_nao_colisao_entre_atores_ativos (self ):
62+ 'Teste de que não há colisão entre atores distantes'
5463 self .assert_nao_colisao (Ator (2 , 2 ), Ator (2 , 4 ))
5564 self .assert_nao_colisao (Ator (2 , 2 ), Ator (3 , 4 ))
5665 self .assert_nao_colisao (Ator (2 , 2 ), Ator (4 , 2 ))
@@ -61,8 +70,9 @@ def teste_nao_colisao_entre_atores_ativos(self):
6170 self .assert_nao_colisao (Ator (2 , 2 ), Ator (0 , 4 ))
6271
6372 def teste_colisao_somente_um_ator_destruido (self ):
73+ 'Teste de que um ator destruído não pode colidir com nenhum outro, mesmo que estejam próximos'
6474 ator = Ator (2 , 2 )
65- ator .colidir (ator , 0 ) # colidingo ator com ele mesmo para alterar seu status para destruido
75+ ator .colidir (ator , 0 ) # colidindo ator com ele mesmo para alterar seu status para destruido
6676 ator2 = Ator (2 , 2 )
6777 self .assert_nao_colisao (ator , ator2 )
6878 self .assert_nao_colisao (Ator (2 , 3 ), ator )
@@ -84,6 +94,7 @@ def teste_colisao_somente_um_ator_destruido(self):
8494 self .assert_nao_colisao (Ator (1 , 3 ), ator )
8595
8696 def test_caracter (self ):
97+ 'Teste de caracter para status ATIVO e DESTRUIDO'
8798 ator = Ator ()
8899 self .assertEqual ('A' , ator .caracter ())
89100 outro_ator_na_mesma_posicao = Ator ()
@@ -92,7 +103,11 @@ def test_caracter(self):
92103
93104
94105 def assert_colisao_atores_ativos (self , ator , ator2 , intervalo = 1 ):
95- 'Se certifica que há colisão entre atores ativos'
106+ """
107+ Se certifica que há colisão entre atores ativos
108+ Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
109+ Ele serve apenas para encapsular toda lógica de teste de colisão entre dois atores ativos
110+ """
96111 # Conferindo status dos dois atores antes da colisão
97112 self .assertEqual (ator .status , ATIVO , 'Status deveria ser ativo antes da colisão' )
98113 self .assertEqual (ator2 .status , ATIVO , 'Status deveria ser ativo antes da colisão' )
@@ -102,7 +117,12 @@ def assert_colisao_atores_ativos(self, ator, ator2, intervalo=1):
102117 self .assertEqual (ator .status , DESTRUIDO , 'Status deveria ser destruido depois da colisão' )
103118
104119 def assert_nao_colisao (self , ator , ator2 ):
105- 'Se certifica que não colisão entre dois atores'
120+ """
121+ Se certifica que não colisão entre dois atores
122+ Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
123+ Ele apenas encapsula a lógica de não colisão entre dois atores.
124+ So seja, eles deve manter seus respectivos status mesmo depois da chamada do metodo colidir
125+ """
106126 # Armazenando status antes da colisão
107127 status_inicial_ator = ator .status
108128 status_inicial_ator_2 = ator2 .status
@@ -133,14 +153,34 @@ def teste_status(self):
133153
134154
135155class PassaroBaseTests (TestCase ):
156+ """
157+ Classe base para teste de passaros.
158+ Essa classe não contèm nenhum teste, serve apenas para encapsular a lógica de asserção de posição de passaros
159+ vermelhos e também dos amarelos.
160+
161+ """
162+
136163 def assert_passaro_posicao (self , x_esperado , y_esperado , status_esperado , passaro , tempo ):
164+ """
165+ Mètodo que se testa posição do pássaro.
166+ Atenção: Esse não é método de teste porque nao se inicia com prefixo "text".
167+ :param x_esperado: posição x esperada do passaro
168+ :param y_esperado: posição y esperada do passaro
169+ :param status_esperado: status esperado do passaro
170+ :param passaro: passaro alvo do teste
171+ :param tempo: tempo do jogo
172+ """
137173 x_calculado , y_calculado = passaro .calcular_posicao (tempo )
138174 self .assertEqual (x_esperado , round (x_calculado ), 'valor real de x = %s' % x_calculado )
139175 self .assertEqual (y_esperado , round (y_calculado ), 'valor real de y = %s' % y_calculado )
140176 self .assertEqual (status_esperado , passaro .status , '(x = %s, y = %s)' % (x_calculado , y_calculado ))
141177
142178
143179class PassaroVermelhoTests (PassaroBaseTests ):
180+ """
181+ Classe de teste e Passaro Vermelho
182+ """
183+
144184 def teste_status (self ):
145185 passaro_amarelo = PassaroVermelho (1 , 1 )
146186 self .assertEqual ('V' , passaro_amarelo .caracter ())
@@ -154,6 +194,11 @@ def teste_velocidade_escalar(self):
154194
155195
156196 def teste_foi_lancado (self ):
197+ """
198+ Teste de lançamento. Enquanto o método lançar do passaro não for chamado, o méotod foi_lancado deve retornar
199+ Falso
200+ :return:
201+ """
157202 passaro_vermelho = PassaroVermelho (1 , 1 )
158203 self .assertFalse (passaro_vermelho .foi_lancado (),
159204 'Se o método lançar ainda não foi executado, deve retornar falso' )
@@ -162,6 +207,10 @@ def teste_foi_lancado(self):
162207 'Se o método lançar foi executado, deve retornar verdadeiro' )
163208
164209 def teste_colisao_com_chao (self ):
210+ """
211+ Testando que o passáro colido quando sua posição y é menor ou igual a 0
212+ :return:
213+ """
165214 passaro = PassaroVermelho (0 , 0 )
166215 passaro .colidir_com_chao ()
167216 self .assertEqual (DESTRUIDO , passaro .status , 'Deve colidir com chão sempre que y<=0' )
@@ -180,6 +229,10 @@ def teste_colisao_com_chao(self):
180229
181230
182231class PassaroAmareloTests (PassaroBaseTests ):
232+ """
233+ Classe de Tests para passaros amarelos
234+ """
235+
183236 def teste_status (self ):
184237 passaro_amarelo = PassaroAmarelo (1 , 1 )
185238 self .assertEqual ('A' , passaro_amarelo .caracter ())
@@ -191,54 +244,56 @@ def teste_velocidade_escalar(self):
191244 self .assertEqual (30 , PassaroAmarelo .velocidade_escalar )
192245
193246 def teste_lacamento_vertical (self ):
247+ """
248+ Tests de lançamento vertical. Nele, o passaro só se move verticalmente e sua posição y se matém contanstante
249+ :return:
250+ """
194251 passaro_amarelo = PassaroAmarelo (1 , 1 )
195252 passaro_amarelo .lancar (90 , 2 ) # passaro lancado a 90 graus no tempo 2 segundos
196253
197- # função auxiliar que mantém x fixo com valor 1, status Ativo, variando apenas o tempo e a posição y
198- def assert_vertical (y , tempo ):
199- self .assert_passaro_posicao (1 , y , ATIVO , passaro_amarelo , tempo )
254+
200255
201256 # subindo
202257
203- assert_vertical (1 , 2.0 )
204- assert_vertical (1 , 2.01 )
205- assert_vertical (2 , 2.02 )
206- assert_vertical (2 , 2.03 )
207- assert_vertical (2 , 2.04 )
208- assert_vertical (2 , 2.05 )
258+ self . assert_posicao_vertical (1 , 2.0 , passaro_amarelo )
259+ self . assert_posicao_vertical (1 , 2.01 , passaro_amarelo )
260+ self . assert_posicao_vertical (2 , 2.02 , passaro_amarelo )
261+ self . assert_posicao_vertical (2 , 2.03 , passaro_amarelo )
262+ self . assert_posicao_vertical (2 , 2.04 , passaro_amarelo )
263+ self . assert_posicao_vertical (2 , 2.05 , passaro_amarelo )
209264
210265 # descendo
211266
212- assert_vertical (46 , 5.26 )
213- assert_vertical (46 , 5.27 )
214- assert_vertical (46 , 5.279999999999999 )
215- assert_vertical (46 , 5.29 )
216- assert_vertical (46 , 5.3 )
217- assert_vertical (46 , 5.3100000000000005 )
218- assert_vertical (45 , 5.32 )
219- assert_vertical (45 , 5.33 )
220- assert_vertical (45 , 5.34 )
221- assert_vertical (45 , 5.35 )
222- assert_vertical (45 , 5.359999999999999 )
223- assert_vertical (45 , 5.37 )
224- assert_vertical (45 , 5.38 )
225- assert_vertical (45 , 5.390000000000001 )
226- assert_vertical (45 , 5.4 )
227- assert_vertical (45 , 5.41 )
228- assert_vertical (45 , 5.42 )
229- assert_vertical (45 , 5.43 )
230- assert_vertical (45 , 5.4399999999999995 )
231- assert_vertical (45 , 5.45 )
232- assert_vertical (45 , 5.46 )
233- assert_vertical (45 , 5.470000000000001 )
234- assert_vertical (45 , 5.48 )
267+ self . assert_posicao_vertical (46 , 5.26 , passaro_amarelo )
268+ self . assert_posicao_vertical (46 , 5.27 , passaro_amarelo )
269+ self . assert_posicao_vertical (46 , 5.279999999999999 , passaro_amarelo )
270+ self . assert_posicao_vertical (46 , 5.29 , passaro_amarelo )
271+ self . assert_posicao_vertical (46 , 5.3 , passaro_amarelo )
272+ self . assert_posicao_vertical (46 , 5.3100000000000005 , passaro_amarelo )
273+ self . assert_posicao_vertical (45 , 5.32 , passaro_amarelo )
274+ self . assert_posicao_vertical (45 , 5.33 , passaro_amarelo )
275+ self . assert_posicao_vertical (45 , 5.34 , passaro_amarelo )
276+ self . assert_posicao_vertical (45 , 5.35 , passaro_amarelo )
277+ self . assert_posicao_vertical (45 , 5.359999999999999 , passaro_amarelo )
278+ self . assert_posicao_vertical (45 , 5.37 , passaro_amarelo )
279+ self . assert_posicao_vertical (45 , 5.38 , passaro_amarelo )
280+ self . assert_posicao_vertical (45 , 5.390000000000001 , passaro_amarelo )
281+ self . assert_posicao_vertical (45 , 5.4 , passaro_amarelo )
282+ self . assert_posicao_vertical (45 , 5.41 , passaro_amarelo )
283+ self . assert_posicao_vertical (45 , 5.42 , passaro_amarelo )
284+ self . assert_posicao_vertical (45 , 5.43 , passaro_amarelo )
285+ self . assert_posicao_vertical (45 , 5.4399999999999995 , passaro_amarelo )
286+ self . assert_posicao_vertical (45 , 5.45 , passaro_amarelo )
287+ self . assert_posicao_vertical (45 , 5.46 , passaro_amarelo )
288+ self . assert_posicao_vertical (45 , 5.470000000000001 , passaro_amarelo )
289+ self . assert_posicao_vertical (45 , 5.48 , passaro_amarelo )
235290
236291 # preparando para impacto no chão
237- assert_vertical (1 , 8.0 )
238- assert_vertical (1 , 8.01 )
292+ self . assert_posicao_vertical (1 , 8.0 , passaro_amarelo )
293+ self . assert_posicao_vertical (1 , 8.01 , passaro_amarelo )
239294
240295 # colisão
241- assert_vertical (0 , 8.04 )
296+ self . assert_posicao_vertical (0 , 8.04 , passaro_amarelo )
242297 passaro_amarelo .colidir_com_chao ()
243298 self .assertEqual (DESTRUIDO , passaro_amarelo .status )
244299
@@ -681,3 +736,10 @@ def test_lancamento_45_graus(self):
681736 # t = 2 + (delta_t / 100)
682737 # x, y = passaro_amarelo.calcular_posicao(t)
683738 # print(' self.assert_passaro_posicao(%s, %s, ATIVO, passaro_amarelo, %s)' % (x, y, t))
739+
740+ def assert_posicao_vertical (self , y , tempo , passaro ):
741+ """
742+ Método auxiliar que mantém x fixo com valor 1, status Ativo, variando apenas o tempo e a posição y
743+ Atenção, esse não é um teste porque não começa com prefixo "test"
744+ """
745+ self .assert_passaro_posicao (1 , y , ATIVO , passaro , tempo )
0 commit comments