FAQ_ADVENTURE_1


1. Como garantir que o grupo tem as últimas alterações que foram feitas no repositório reference? As últimas alterações podem ser trazidas para o repositório do grupo da seguinte forma:
git remote add reference https://github.com/tecnico-softeng/reference.git
git pull reference master:origin/master

O propósito destes comandos serão explicados no início da segunda entrega do projeto.


2. Qual a especificação do método Renting.conflict?

O método conflict do módulo Renting verifica se existe sobreposição entre um dado aluguer e um período temporal. O período temporal é representado através de duas datas (data de início e de fim) que são recebidas como argumentos do método. Assume-se que o veículo fica ocupado também durante todo o dia das datas de início e fim do aluguer.

O método lança a exceção CarException se for observado o seguinte nos argumentos do método: data de fim é anterior à data de início. 


3. Qual a especificação do método Renting.checkout?

O método `Renting.checkout` serve para assinalar o fim do aluguer, correspondendo à devolução do veículo por parte do cliente.É neste momento que é feita a atualização do número de quilómetros desse mesmo veículo.


4.  Quando o processPayment(IBAN) itera pelos bancos, se a conta não estiver no primeiro banco é lançada uma excepção pelo getAccount(IBAN). Ou seja, o banco só funciona para um banco. 

Isso é um bug e deve ser corrigido pela sub-equipa que está a desenvolver os testes para o módulo bank. Nesse contexto, o método getAccount(IBAN) deve devolver uma exceção se IBAN é null, vazio ou com brancos, e null se não existe nenhuma conta associada ao IBAN.


5. Na primeira parte do projeto quando diz `Seller(TaxPayer).getInvoiceByReference(INVOICE_REFERENCE)` poderia explicar melhor `Seller(TaxPayer)`? `getInvoiceByReference` é um método de que classe?

Deverá ser  um método da classe abstrata TaxPayer, mas que apenas pode ser testado no contexto de uma das suas subclasses.


6. No UML do módulo car é mencionado que o RentACar tem uma string code. No entanto na sua criação não é pedido um código como argumento. O que é que devemos fazer? Fazer com que o programa gere códigos consecutivos sozinho?

Sim, deve ser gerado pelo módulo. Encontram casos semelhantes nos outro módulos, por exemplo na classe Booking do módulo activity, semelhante, mas não igual. Não existe nenhuma restrição quanto à sua estrutura, apenas que é único por instância de RentACar.


7. Quando queremos testar por exemplo um metodo `void func(int arg1, int arg2, int arg3, int arg4)` para ver se é atirada uma exceção quando um argumento é null, "", ou "   " tenho de fazer dezenas testes separados a chamar `c.func(null, a, b, c)` , `c.func(a, null, b, c)`, etc... ou há uma maneira melhor de fazer?

Pode experimentar https://github.com/junit-team/junit4/wiki/Parameterized-tests


8. Na criação dos testes que faltam para as classes, broker, activity, etc é preciso fazer os testes para getters setters?

Não é necessário testar os getters nem os setters, a não ser que contenham alguma lógica de negócio.


9. A criação do domain do módulo Car (de acordo com o modelo do UML do enunciado) tem de estar associado a uma issue no github? Ou podemos simplesmente fazer um commit não associado a issue nenhuma?

Depende, se não estiver associada a um issue é responsabilidade de quem implementar a primeira funcionalidade deste módulo.