Este é um acompanhamento para esta pergunta. Eu estava perguntando como fazer testes de unidade quando você tem uma biblioteca de algoritmos científicos. Eu tenho um problema semelhante agora, mas com um projeto diferente.
Estou trabalhando em uma abstração de estrutura de mecanismo de gráficos 3D para DirectX, OpenGl, WebGl, Silverlight, WPF e basicamente qualquer API 3D existente, em C #, chamada Rendering .NET . O cenário é o seguinte, o projeto está sendo desenvolvido por uma pequena equipe de colegas meus, todos trabalhando no mesmo escritório. Somos todos cientistas da computação, pouco interessados na comunidade e nas práticas de engenharia de software. Eu até tive dificuldade em convencer a mudar do Subversion para o Git e publicar o projeto no Codeplex. O projeto está ficando grande (cerca de 80 mil linhas de C #) e agora abrange a maior parte do DirectX e do OpenGl até o Shader Model 5.0, portanto, não é um projeto único como o descrito na pergunta vinculada. Também queremos incentivar a comunidade de código aberto a colaborar.
Até agora, testamos escrevendo pequenos aplicativos que envolvem a inicialização de todos os dispositivos e recursos, a criação de uma cena e o desenho. O problema é que não sei como diferenciá-lo, quero dizer, como projetar pequenos casos de teste que testam recursos específicos da estrutura, como alocação de recursos, mosaico primitivo, compilação de sombreamento, etc., sem ter que recriar o inicialização do mecanismo inteiro. Para alguns desses casos, posso pensar em zombarias úteis, mas, em geral, como posso testar a correção de um algoritmo de renderização quando a saída é visual (uma imagem ou uma cena animada)? No momento, a coisa mais inteligente que encontramos é renderizar a mesma cena para um renderizador de software, DirectX e OpenGl, e compará-los pixel por pixel,
Então, qual é a abordagem de teste "correta" aqui?
fonte
Respostas:
A abordagem de teste "correta" seria dissociar sua lógica de desenho das chamadas do DirectX ou do OpenGL, para que você possa zombar da última (e, como outro caso de uso, use a mesma lógica de negócios do DirectX ou do OpenGL).
Você não deseja testar se o DirectX ou OpenGL está funcionando corretamente - esse é o trabalho da Microsoft. Você também deseja que o código de inicialização do dispositivo seja gravado e testado apenas uma vez (e depois reutilizado), para que um teste manual dessa parte seja acessível. Se você quiser testar essa peça automaticamente também, use sua abordagem pixel por pixel, mas com um desenho de teste muito simples. Portanto, concentre-se em escrever testes de regressão automatizados para sua lógica de desenho desacoplada, que trará mais benefícios.
Portanto, a idéia é dividir seu código em componentes realmente independentes - sua inicialização do DirectX não deve ser acoplada à lógica de desenho e a lógica de desenho não deve depender do DirectX - isso torna seu programa testável.
EDIT: encontrei este post anterior em testes de unidade para código OpenGL, havia apenas algumas respostas, mas talvez traga algumas informações adicionais.
fonte