Executando verificação de segurança...
2

Rapaz, eu valorizo o seu esforço em explicar o problema, e o software no qual você trabalha é bem interessante. No entanto, o escopo das suas perguntas é bastante amplo, o que torna um pouco difícil responder.

Talvez pessoas com experiência em câmeras possam ajudar, mas eu não conheço muito sobre o tema. Também considere criar outro post para explorar apenas um dos exemplos nos quais você precisa de ajuda. Com um escopo menor, pode ser mais fácil obter ajuda.

Contudo, gostaria de dar algumas dicas mais genéricas:

  • Ao escrever funções, minimize os "side effects" e faça com que suas funções retornem valores sempre que possível. Assim, você pode testar as funções de forma isolada, constituindo a base para os seus testes unitários.

  • Utilize injeção de dependência e inversão de controle quando possível.

  • Codifique pensando em interfaces (ou algo semelhante, como traits ou classes abstratas). Dessa forma, nos seus testes, você pode trocar um objeto/classe real, como as câmeras, por outros de teste (como uma câmera virtual, por exemplo), através da injeção de dependência.

Carregando publicação patrocinada...
1

É que eu me empolgo rsrsrs, mas entendo, sempre me falam que preciso ser mais objetivo.

  • Ao escrever funções, minimize os "side effects" e faça com que suas funções retornem valores sempre que possível. Assim, você pode testar as funções de forma isolada, constituindo a base para os seus testes unitários.

Essa parte do side effect que você se refere, só para ter certeza, é:

A function is said to have a side-effect when the function changes a non-local state or when its output is not deterministic

Nesse caso de fato é uma coisa que é um pouco problemática. Pois normalmente as funções que a gente desenvolve alteram arrays que são fornecidos por referência. Mas entendo a motivação da sugestão, vou pensar em algumas formas de lidar com isso.

Codifique pensando em interfaces (ou algo semelhante, como traits ou classes abstratas). Dessa forma, nos seus testes, você pode trocar um objeto/classe real, como as câmeras, por outros de teste (como uma câmera virtual, por exemplo), através da injeção de dependência.

Bem interessante essa sua sugestão, acho que isso vai ser uma das minhas primeiras abordagens para começar a desenvolver testes.

Muito obrigado!

2

Nesse caso de fato é uma coisa que é um pouco problemática. Pois normalmente as funções que a gente desenvolve alteram arrays que são fornecidos por referência. Mas entendo a motivação da sugestão, vou pensar em algumas formas de lidar com isso.

Correto, isso é mesmo um side-effect. No entanto, é um side-effect que podemos testar. Por exemplo, passe um array para a função e depois verifique se o array contém o conteúdo esperado depois que a função for executada, assumindo que que o array resultante tem um valor deterministico.

Uma das maneiras teóricas de remover o side-effect desta função é fazê-la retornar outro array com o resultado esperado. Mas acredito que, no seu caso, não seria uma boa ideia, pois isso duplicaria o espaço em memória; esta técnica funciona melhor quando os objetos retornados são leves.