J'ai créé la structure suivante:
├── Assets
├── Scenes
├── Scripts
│ └── MyExample.cs
├── Tests
│ ├── MyExampleTest.cs
│ └── Tests.asmdef
Maintenant, lorsque je clique sur Tout exécuter, dans la fenêtre Test Runner, dans Unity, le message d'erreur suivant s'affiche:
The type or namespace name `MyExample' could not be found. Are you missing an Assembly reference?
Dans Visual Studio, j'ai deux projets:
Assembly-CSharp (contenant src)
Tests (contenant des tests)
J'ai ajouté Assembly-CSharp comme référence dans le deuxième projet. Visual Studio est capable de générer la solution sans erreur.
Est-ce que quelqu'un sait comment configurer correctement une régression UnitTest pour un projet Unity?
C'est Tests.asmdef
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
]
}
MyExampleTest.cs
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using abc;
public class MyExampleTest{
[Test]
public void NewTestScriptSimplePasses() {
// Use the Assert class to test conditions.
}
[UnityTest]
public IEnumerator NewTestScriptWithEnumeratorPasses() {
abc.Example m;
Assert.That(false);
yield return null;
}
}
Mon exemple.cs
namespace abc
{
public class Example
{
}
}
Essayez d’utiliser l’interface utilisateur de Test Runner intégrée pour configurer votre dossier Test Assembly et votre premier script de test.
Utilisation Window -> Test Runner -> EditMode -> "Create Test Assembly Folder"
et une fois que vous avez accédé au nouveau dossier Test Assembly, utilisez la commande Create Test Script in current folder
bouton.
En particulier, votre Tests.asmdef
Il manque une inclusion "Editor" par rapport à la configuration par défaut (dans Unity 2018.1).
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
]
}
Vous ne devez rien faire manuellement dans le projet Visual Studio dans le but de configurer vos tests.
Notez que lorsque mon fichier d'assemblage est défini sur "Toutes les plates-formes" comme suit (comme dans votre question):
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
]
}
Mes tests n'apparaissent pas dans la fenêtre Test Runner.
Lorsque mon fichier d'assemblage est explicitement défini pour inclure uniquement la plate-forme "Editeur" (comme dans mon exemple précédent), mes tests s'affichent correctement dans la fenêtre Test Runner.
(Ce comportement me semble un peu contre-intuitif.)
Vous devez également configurer une définition d'assemblage pour vos scripts. Sous votre dossier Scripts
, créez un fichier de définition d'assembly MyScriptAssembly.asmdef
_ (en utilisant le menu Unity Assets -> Create -> Assembly Definition
ou manuellement):
{
"name": "MyScriptAssembly"
}
Ensuite, assurez-vous que votre Tests.asmdef
référencez votre script Assembly:
{
"name": "Tests",
"references": [
"MyScriptAssembly"
],
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false
}
Vous pouvez également le configurer dans la fenêtre de l'inspecteur Unity Editor. Voir "Références" dans l'inspecteur lors de la sélection d'un fichier .asmdef:
(Pour plus de détails, voir documentation de Unity sur les fichiers de définition d'Assembly) )
Enfin trouvé la bonne solution pour cela. Et tout se fait à travers l'éditeur.
Notre objectif est donc de faire en sorte que l’assemblée de test fasse référence à l’assemblée en code réel. Pour ce faire, vous devez définir les deux assemblys, puis définir la référence dans l'unité.
Vous êtes prêt Vos tests doivent être visibles et exécutables dans Unity, et ils peuvent référencer tout autre script.
N'oubliez pas que vous pouvez supprimer TOUS les fichiers .csproj et .sln du dossier racine et qu'Unity les recréera (ils ne doivent pas non plus être sur le contrôle de source).
Donc, votre test pour aller pour des changements comme ça devrait toujours être de
Bonus: Nous avons également quelques projets de débogage dans notre projet situés dans Assets/DebugScenes/DebugScripts. En créant un assemblage séparé pour eux et en le faisant référencer le script réel Assembly (si nécessaire) et en le marquant comme éditeur, nous nous assurons que ces scripts ne sont jamais inclus dans notre construction sans aucune étape supplémentaire construire.
Lecture supplémentaire. Vous pensez peut-être que vous ne voulez pas créer d'assembly pour TOUS vos scripts car vous souhaitez seulement en tester quelques-uns. Et il est vrai que vous pouvez créer un assembly pour un sous-dossier, mais cela vous causera des problèmes car vous devrez alors créer une référence d'un assemblage de scripts réel à un autre. Alors assurez-vous que tout est bien rangé et a du sens ...