Para minha vergonha, nunca escrevi um teste de unidade adequado, apenas pequenos programas de teste não organizados que eu descartaria depois que o teste fosse bem-sucedido. Eu realmente não tenho uma idéia clara de como o teste de unidade deve ser realizado em um projeto de jogo. (Minha linguagem é C ++.)
Devo ter um projeto separado para cada subsistema no meu mecanismo e um teste associado a ele e, em seguida, ter um projeto / solução maior que construa o mecanismo real? Digamos, por exemplo, eu tenho o event
módulo no meu mecanismo; como devo lidar com isso?
c++
software-engineering
unit-testing
Paul Manta
fonte
fonte
Respostas:
Primeiro, você precisaria de uma estrutura de teste de unidade. No passado, eu usei o UnitTest ++ e o Google Test . O primeiro é muito leve e o segundo é mais destacado, mas um pouco mais pesado. Ele se integra bem ao Google Mock, caso você precise desse tipo de coisa. Obviamente, existem muitas outras opções: consulte esta lista (pelo eventual autor do UnitTest ++) e a Wikipedia, por exemplo.
O teste de unidade trata da escrita de testes focados para enfatizar determinados bits de código independentes isolados ("unidades") em vários cenários. Embora em alguns casos você possa testar tudo, geralmente não é prático obter 100% de cobertura e, especialmente em jogos, pode ser bastante difícil - é discutível se o teste de unidade da saída do renderizador é ou não significativo, útil ou um teste de unidade "verdadeiro" independentemente.
É importante lembrar que qualquer teste (automatizado) é melhor do que nenhum teste (automatizado). Portanto, você não deve se estressar demais com o fato de seus testes não serem "verdadeiros testes de unidade" e se orgulhar de ter simplesmente testes. As estruturas de teste de unidade geralmente são úteis para criar testes "não unitários", mais frouxos, pois incluem funcionalidade para testes de empacotamento e relatório de falhas de maneira uniforme.
Gostaria de encorajá-lo a ressuscitar seus testes antigos e transformá-los em um projeto de teste usando uma das estruturas disponíveis - algo que você pode executar facilmente de tempos em tempos (ou automaticamente como parte de uma versão ou integração) que executa todos os seus testes. Escreva novos testes para bits de código, pois fica aparente que seria útil para você; por exemplo, se você descobrir um bug sutil que poderia ter detectado com um teste, poderá adicionar um para capturar todas as regressões que fizer no futuro.
Você provavelmente descobrirá que esse código de utilidade de nível inferior é passível de teste de unidade em jogos. Tudo bem - é o código básico que pode perturbar muitas camadas mais altas se quebrar.
Você não irá ao purgatório do programador por não ter testes para todas as funções e portas lógicas da sua base de código; portanto, não gaste mais tempo do que precisa para escrever testes. Se você precisar pensar mais ou gastar significativamente mais tempo escrevendo os testes de um módulo do que o necessário para criar o módulo, pode estar desperdiçando seu tempo. Teste de unidade - teste em geral - é uma ferramenta que você aprende a usar adequadamente para ajudá-lo, não uma tarefa que você deve executar para tudo.
fonte
If you have to [...] spend significantly more time writing the tests [...] than it took you to author the module
... Então seu módulo é muito complexo. Simplifique agora, você agradecerá a si mesmo no futuro!Há uma grande série de postagens de blog sobre o uso de TDD e testes de unidade para o desenvolvimento de jogos aqui: http://gamesfromwithin.com/stepping-through-the-looking-glass-test-driven-game-development-part-1
fonte
Uma "unidade" é o menor pedaço de código testável, geralmente uma única função ou classe. Um teste de unidade é outro trecho de código que exercita essa unidade de código para garantir que ela se comporte conforme o planejado. Uma única unidade de código pode ter muitos testes, para cobrir todos os casos.
Normalmente, os testes não são incluídos na construção principal de um projeto. Em vez disso, há uma configuração de compilação separada para teste que inclui todo o código de teste e produz um programa que executa todos os testes e relata os resultados. Uma estrutura de teste fornecerá todo o andaime para isso e é recomendada, embora não seja estritamente necessária. Se você é totalmente novo no teste, pode ser melhor escrever primeiro seu próprio equipamento de teste ad-hoc, para garantir que você entenda tudo o que está acontecendo.
Cubra o máximo de código possível com os testes, priorizando o código que você não confia ou o código que é frágil e que pode ser quebrado por alterações futuras. Você deve executar os testes com frequência, idealmente após cada alteração de código.
fonte