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.