Olá pessoas,
Para praticar com algumas ferramentas de GUI estou criando uma calculadora (não é uma calculadora comum, mas só vou dar detalhes quando estiver pronto
)
A parte do “modelo”, que eu chamei de Engine, é onde está toda a lógica de cálculos, controle de estados conforme o pressionamento das teclas, formatação dos números em bases diferentes, etc. Pois bem, essa parte eu resolvi programar usando TDD, e já comecei empacando um pouco.
A API desse engine seria basicamente o seguinte:
- Um método “input” é chamado pela GUI a cada tecla digitada, e a engine é responsável por concatenar esse valor ao que ele já tem. Por exemplo, o valor atual é “70” ; o usuário pressiona o “1”, a GUI chama engine.input(“1”) e o valor interno passa a ser “701”
- Esse valor internamente é armazenado como número, mas não há necessidade de expor na API.
- Outros métodos são chamados pela GUI na renderização, ele traz os valores formatados na base desejada. São métodos do tipo “getValueBase10()” ou “getValueBase16()”
Penso que os primeiros testes devem abordar esse input/output básico, para só depois ir aos cálculos e manutenção de estados. Mas estou em um dilema: Se escrever um teste para o método de input, como vou testar o resultado sem chamar o método de output? Se escrever um teste para o método de output, como entrar com os dados? Devo deixar o campo com o valor interno (numérico) público para que os testes possam manipulá-lo? Seria correto em um teste usar como suporte um outro método da classe que está sendo testada - por exemplo, pegar o resultado formatado para validar o input?
Como desenrosco esse nó? Ou há algum erro além disso, e o melhor seria mudar a abordagem inicial?
Obrigado!