Unity_Best_Practices

Best practices guide for Unity : Versioning, unit testing, TDD and Clean Architecture

View project on GitHub

Gestion des dépendances

Les dépendances dans les tests unitaires

Dans la pratique, un TU ne doit jamais s’appuyer sur une dépendance extérieure (service web, base de données, librairie, …). En effet, cela peut entraîner un biais et peut rendre les T.U. plus difficiles à maintenir dans le temps.
Une dépendance extérieure aura tendance à rallonger le temps d’exécution.

Pour être sûr de tester un seul comportement, sans aucune dépendance, il est possible de créer des bouchons (mock ou stub) pour remplacer une classe. Cela permet d’éviter un null exception en renseignant un objet de substitution, ou encore de vérifier qu’une fonction est bien appelée sans exécuter son code.

Quelle est la différence entre Stub et Mock ?

Un Stub est un objet que vous pouvez contrôler, qui sert de substitut à une dépendance extérieure (exemple : un faux service web qui renvoie toujours la même information)

Un Mock est un objet de substitut dans le système, qui décide si un test unitaire passe ou échoue (exemple : une base de données qui attend une certaine requête bien précise)

TU avec dépendances dans Unity

Pour créer des mocks ou des substituts avec Unity, vous pouvez installer NSubstitute, pour cela il suffit de placer le fichier NSubstitute.dll dans votre projet Unity. Vous pouvez télécharger ce fichier ici.

Exemple : On veut s’assurer que la méthode InitializeObject() du GameManager.cs est appelée avec le bon paramètre lors du Start() du script ObjectBehaviour.cs

[Test]
public void WhenGameStartObjectInitialize()
{
    //Arrange
    ObjectBehaviour object = new GameObject().AddComponent<ObjectBehaviour>();
    GameManager gameManagerMock = Substitute.For<GameManager>();
    object .GameManager = gameManagerMock;

    //Act
    object.Start();

    //Assert
    gameManagerMock.Received().InitializeObject(object);
}

Retour au menu

Injection de dépendances

D de SOLID (voir partie suivante) => Zenject

Retour au menu