Ir para o conteúdo
Idioma: PT

Dá para testar código NFC sem uma tag na mão?

Metade dá. Tudo o que transforma bytes em sentido testa como código comum: os quadros que você monta, as respostas que você interpreta, os registros que você decodifica. Tudo o que envolve o campo, uma tag que sai, um controlador que recusa um tamanho, uma sessão que o sistema encerra, só aparece num aparelho.

Isole as chamadas de rádio

A metade testável é a metade que nunca toca o rádio: montar um comando, interpretar uma resposta, decidir o que uma palavra de estado quer dizer, transformar um registro NDEF em algo que o seu aplicativo entende. A metade não testável são quatro ou cinco chamadas, transceive(), connect(), close() e os equivalentes iOS delas.

Então ponha essas chamadas atrás de uma única interface e mantenha todo o resto do lado puro dela. Essa única decisão é o que faz a diferença entre um projeto com testes e um projeto onde cada mudança precisa de uma tag, e ela não custa nada na hora em que você escreve o código.

O que testa fora do aparelho

Quadros e analisadores, primeiro: os bytes de um SELECT, o percurso pelos blocos TLV de uma tag Tipo 2, os dois bytes de estado no fim de uma resposta APDU, o campo de tamanho de um arquivo NDEF. Todos eles são funções de bytes para bytes, e os casos limite deles, uma resposta truncada, um tamanho que ultrapassa o buffer, um tipo de registro desconhecido, são exatamente para o que serve um teste de unidade.

O tratamento de erros também. Um teste consegue entregar ao seu código a exceção que a plataforma levantaria e conferir o que acontece em seguida: uma nova tentativa que começa pela detecção em vez de retomar, uma gravação que lê de volta antes de decidir, uma autenticação que recomeça. A página da tag perdida lista quais são essas exceções.

O que só um aparelho mostra

Os limites do celular que você tem em mãos: o tamanho máximo que um comando consegue carregar, se as APDU estendidas são suportadas, que classes de tecnologia opcionais existem, tudo isso que a página dos limites do controlador lê em tempo de execução pela mesma razão.

E o comportamento do campo: uma tag que sai no meio de uma gravação, uma sessão que o sistema encerra, um leitor que desiste, as regras da tela de bloqueio e da tela desligada na emulação de cartão, o despacho que o sistema operacional faz antes de o seu código rodar. Nada disso é simulado por coisa alguma, que é a razão de os testes que importam terminarem com um celular e uma tag numa mão.

Trocas gravadas como dados de teste

Grave trocas reais e as reproduza. Um registro de cada comando e de cada resposta, que a página do registro explica como produzir, vira um dado de teste: os mesmos bytes, reproduzidos na metade pura do seu código, reproduzem o defeito sem a tag que o causou.

Guarde um dado de teste por família de tag e por falha. E guarde as próprias tags, que é uma lista mais curta do que parece: a página do conjunto de teste a faz.

Perguntas frequentes

Um emulador consegue substituir uma tag?

Não. O campo, a temporização e os limites do controlador são a parte que falha, e um emulador não tem rádio com que falhar.

O que deve ter teste de unidade?

Tudo o que vai de bytes a sentido: quadros, analisadores, palavras de estado, decodificação de registros, e como o código reage a cada erro da plataforma.

Como testar o tratamento de erros sem causar erros?

Entregue ao código a exceção que a plataforma levantaria, atrás da interface que envolve as chamadas de rádio, e verifique o que ele faz em seguida.

Ainda preciso de tags se eu tenho dados de teste?

Precisa. Os dados de teste provam a interpretação; só uma tag real prova a troca, a temporização e os limites do celular.