Skip to content

Testing

Flo edited this page Nov 27, 2017 · 13 revisions

utilisation de Unity 2017.2

1) Prototyping

Un prototype répond à 1 question : est-ce que un casse-brique-rogue-like c'est fun? Est-ce que Android sait faire tourner ça?

Le code et les assets du prototype ne doivent pas être gardés, parce que en général ils sont tout pourri. Toute idée doit être prototypée pour vérifier qu'elle est bonne.

2) Implémenter des tests

Une fois qu'on code sérieusement, on commence a implémenter des tests: les tests unitaire et les tests système.

Unit test (test unitaire)

Va tester 1 comportement de 1 méthode.

En python il existe la méthode assert, dans la libraire pytest.

import pytest

def factoriel(n):
    r=1
    for n in range (1, n+1):
        r *= f
    return r

def test_factoriel():
    assert factoriel(4) == 24

Unity ne possède des manières de tester en interne que depuis la version 2017.

Aller dans le menu Window > Test Runner pour ouvrir la fenêtre de testing. On y trouve 2 onglets : EditorMode et Playmode

EditorMode

Cliquer sur le bouton Create editor test, et il créera un script de test au bon endroit avec tout les import de librairie nécessaire.

Il existe deux types de méthode de test : les Test simple, et les Unity test s'il y a une coroutine à tester.

Si par exemple on a besoin que dans chaque scène il y a exactement 1 objet avec le tag Player :

public void OnlyOnePlayer()
{
    GameObject[] players = GameObject.FindGameObjectsWithTag("Player");
    Assert.AreEqual(1, players.Length);
}

Si ensuite on veut vérifier que le joueur a bien le composant Jumper :

[Test]
public void PlayerHasJumperComponent()
{
    GameObject player = GameObject.FindGameObjectWithTag("Player");
    if (player == null)
    {
        Assert.Ignore();
    }
    Assert.NotNull(player.GetComponent<Jumper>());
}

En cliquant sur Run All, la fenêtre se mettra à jour, indiquant si les tests sont réussi ou non.

PlayMode

Test pour quand le jeu tourne

Exemple : tester si un objet a bien un composant.

[Test]
public void JumperAddRigidBody()
{
    GameObject test = new GameObject();
    test.AddComponent<Jumper>();
    Assert.NotNull(test.GetComponent<Rigidbody>());
}

Si on veut tester que le script fait bien monter l'objet de 10f

[UnityTest]
public IEnumerator TestPosition()
{
    GameObject test = new GameObject();
    test.AddComponent<Jumper>();
    float originalY = test.transform.position.y;
    yield return new WaitForFixedUpdate();
    Assert.Greater(test.transform.position.y - originalY, 10);
}

System test

3) Profiling

Attention, le profiling dépend énormément de la machine sur laquelle on teste, donc il vaut mieux le faire sur la configuration la plus faible sur laquelle on veut que le jeu soit jouable.

Tester les performance de jeu. Unity Window > Profiler Le Deep Profiler est à activer/désactiver si on ne veut tester que les fonciton réellement appelées. Profile 2ditor permet de profiler l'éditeur de Unity, à faire si il y a des gros ralentissement dans l'éditeur.

Clone this wiki locally