É possível escrever testes unitários para Unity usando o Unity Test Runner. Gostaria de invocar esses testes na linha de comando para poder executá-los como parte do meu fluxo de trabalho do Git de forma automatizada.
Você pode executar testes na linha de comando via
Unity.exe -runTests -batchmode -projectPath ~/path -testPlatform PlayMode
Isso funciona bem, porém o Unity sempre executa meus testes com uma resolução de 640 x 480, o que não é realista. Uma grande motivação para eu fazer esses testes também é testar a correção em diferentes resoluções de destino, o que parece não ser possível.
Semelhante ao seu método, mas em vez de usar
SizeSelectionCallback
o que, como você imaginou, requer que as resoluções correspondentes já existam pré-configuradas, você também pode ir diretamente porSetCustomResolution
.Isso não implica necessariamente a necessidade de pré-configurar as resoluções em cada projeto e também é mais flexível, pois permite passar seus parâmetros como casos de teste ou até mesmo como argumentos de console do lado do CI! (Veja
System.Environment.GetCommandLineArgs
)Além disso, em vez de passar por
Reflection
, geralmente prefiro usar as "pontes de montagem".O Unity expõe os
internal
tipos a assemblies certamente nomeados, como por exemplo,Unity.InternalAPIEditorBridge001
atéUnity.InternalAPIEditorBridge024
o uso do[InternalsVisibleTo]
atributo. (Veja o código-fonte )Ao simplesmente criar um assembly (definição) com o nome correspondente, você obtém acesso direto a todos
UnityEditor
internal
os tipos e métodos, de modo que, em vez deReflection
simplesmente usarEm teoria, você poderia até exportar este assembly especial e seus testes como um
.unitypackage
(não confundir com o Gerenciador de Pacotes) e importá-lo para um projeto existente como parte do CI (-importPackage <pathname>
) sem sequer ter os testes em si no seu projeto original. Mas isso, é claro, só faz sentido para testes muito genéricos que podem ser repetidos em/para todos os seus projetos.Parece que não há uma API oficial do Unity para isso, porém isso pode ser alcançado por meio de reflexão em testes (com um risco moderado de quebra em versões futuras do Unity, é claro).
Este código alternará o GameView para usar a resolução pré-configurada em um determinado
index
menu suspenso.