Olá. Você disse que existem algumas possibilidades que podem ocorrer com uma camera real que não são tão simples de replicar. Pode citar alguns exemplos?
Respondendo sua pergunta:
- Particularmente uso muito testes unitários, de integração e de aceitação. Geralmente a parte mais dificil é escrever o primeiro. Depois que ele está pronto os outros são mais simples. Acredito que tentar ver isso não como testes, mas como especificações/comportamentos que seu código deva ter, facilita encontrar o que você precisa testar. Tenta conversar com a pessoa que hoje faz esses testes e verifica o que ela valida. Pode ser um ponto de partida. Ou pode tentar automatizar o "caminho feliz" e depois levantar outras necessidades.
Pela sua descrição, seus testes possuem dependencias externas o que dificulta um pouco a implementação. Uma sugestão é trabalhar com "mock objects" ou monkeypatch de funções para tentar simular esse dispositivo. Não sei como você faz essa integração mas acredito que exista uma biblioteca que você possa simular as chamadas a ela. Se você criou uma abstração em cima dessa biblioteca fica mais fácil.
- Sim, existe sim. Nunca criei teste automatizado para react mas criei muitos para componentes vue. Dá uma olhada em https://testing-library.com/. Me ajudou muito a criar testes para componentes em vue usando jsdom para simular o browser. Obviamente não substitui um browser, mas para validar comportamento do componente é excelente. Deixa para testar no browser (também de forma automatizada) apenas o que não consegue rodar no jsdom. O motivo é velocidade. Se testar tudo no browser o tempo de execução e retorno do seu teste será maior e a tendencia é roda-los com menos frequencia. Com isso é legal testar apenas o que não conseguir testar de outra forma.
Você disse que existem algumas possibilidades que podem ocorrer com uma camera real que não são tão simples de replicar.
Pode citar alguns exemplos?
Alguns comportamentos:
- A câmera pode enviar alguns frames com problema ao realizar o encoding do vídeo. Ao fazer o decoding, a imagem vai vir com diversos artefatos de compressão, assim que chamamos. Isso é bem complicado de detectar, ao menos eu não conheço uma forma fácil. Até onde eu saiba é só possível de ver visualmente.
- A câmera pode não conseguir ler a imagem em um determinado momento. Agora, o que vai acontecer com a leitura é um processo complicado. Podem haver dois possíveis comportamentos: a thread de leitura de câmera vai ficar travado ao tentar ler o frame, ou ela pode jogar um frame vazio. Contudo, existe um terceiro comportamento que eu já observei alguns poucas vezes, que o leitor de video morre totalmente. Ele quebra e nada mais funciona. Nós utilizamos a OpenCV para realizar a leitura da câmera e esse problema é realmente difícil de detectar. Esse problema os desenvolvedores ainda não conseguiram resolver.
Cara, gostei do que você descreveu no item (1). Acho que um bom jeito é eu encarar isso com minha equipe como sendo um "projeto", em que a gente tem que levantar os requisitos e desenvolver código em cima.
Muito obrigado pela dica da lib, vou testar!