XCTest ?

Je n'ai jamais utilisé de classe tests, je sais c'est une grave erreur. Je me suis toujours contenter de petits tests à  l'intérieur de mes classes qui renvoyait la plus part du temps un message dans ma console. Il est vrai que je n'ai fait que de petites applications


 


Aujourd'hui je me lance mais je n'y comprend rien. 


 


Voici le genre de test que je fais actuellement :



private let numberOfDigits = 3
private let original = 0

override func viewDidLoad() {
super.viewDidLoad()

let maxV = Int(pow(10.0,Double(numberOfDigits)) - 1)
let minV = 0

if original <= maxV && original >= minV {
let s = "\(original)"
if Int(s) == original {
print("original value is correct")

}
else {
print("original value must be an int")
}

}
else {
print("original value is not correct")
}
}

Je me demande si il serait possible de faire cela avec les classes test ? Si oui par ou commencer ?


 


Merci de votre aide


Mots clés:

Réponses

  • CéroceCéroce Membre, Modérateur
    octobre 2015 modifié #2

    Franchement, je ne sais pas, parce que je ne comprends pas ton code. Qu'est-ce qu'il est sensé faire ? (j'ai bien une idée, mais je ne trouve pas ça clair du tout).


  • iLandesiLandes Membre
    octobre 2015 modifié #3



    c'est un brouillon vite fait


     


    en gros j'ai un nombre de digit (ici 3) et un entier ici 0. Je vérifie que je peux écrire 0 sur avec 3 digit (-> oui) par contre si j'essaye avec 1000 cela me dit que la valeur est incorrect car 1000 contient 4 digits.


     


    c'est un code que je n'utilise pas, c'est juste pour faire des essais avec des classes tests


     


    J'aurais pu faire aussi un truc du genre. ce que je cherche c'est faire les test en dehors de ma classe dans une classe test



    let max = 100
    let min = 1

    let number = 10 // Mon nombre peut venir d'ailleurs et changer

    if number <= max && number >= min {
    print ("number is correct")
    } else {
    print ("number is NOT correct")
  • CéroceCéroce Membre, Modérateur
    octobre 2015 modifié #4
    Tu aurais une fonction à  tester:
    BOOL integerFitsInDigitCount(int integer, unsigned digitCount);
    Ensuite, tu as deux cas de test:
    -(void) test0FitsIn3Digits {
    XCTAssertTrue(integerFitsInDigitCount(0, 3));
    }

    -(void) test1000DoesNotFitIn3Digits {
    XCTAssertFalse(integerFitsInDigitCount(1000, 3));
    }
  • CéroceCéroce Membre, Modérateur
    Au passage, on voit bien que deux cas de test ne suffisent pas, parce que je peux l'implémenter comme ça et faire passer le test:
    BOOL integerFitsInDigitCount(int integer, unsigned digitCount) {
    return (integer == 0);
    }
    Et je réponds à  la spec.
  • Mouais, Merci Céroce


     


    Mais je comprends toujours pas ces classes XCTests et franchement y'a pas beaucoup d'information la dessus dans les bouquins que j'ai ou sur le net...


  • Un bon bouquin sur le sujet.


     


    Et un site qui traite spécifiquement du sujet.


  • CéroceCéroce Membre, Modérateur
    octobre 2015 modifié #8


     


    Mais je comprends toujours pas ces classes XCTests et franchement y'a pas beaucoup d'information la dessus dans les bouquins que j'ai ou sur le net...




    As-tu des questions spécifiques ? Nous pouvons te donner des exemples. Personnellement, j'ai appris dans des bouquins illustrés par du code Java.


     


    La mise en pratique est assez simple:


    - on crée une classe qui hérite de XCTestCase (utiliser le template de Xcode). Pour les tests unitaires, on crée une classe de test par classe fonctionnelle; on lui donne le même nom, suffixé par "Tests". 


    - chaque méthode de test doit commencer par "test". Ces méthodes seront appelées à  tour de rôle.


    - avant chaque test, la méthode setUp est appelée


    - après tout test, la méthode tearDown est appelée.


     


    Dans une méthode de test, on utilise des assertions pour vérifier qu'on obtient bien le résultat attendu. La fonction de base est XCAssert() qui vérifie que l'expression est vraie.


    - XCAssertTrue() est synonyme de XCAssert().


    - XCAssertFalse() vérifie que l'expression est fausse.


    - XCAssertEqual() vérifie que les deux expressions sont égales. À utiliser pour les types primitifs (scalaires, structures) ou vérifier que les deux variables pointent sur le même objet.


    - XCAssertEqualObjects() vérifie que les deux objets sont égaux (en appelant la méthode isEqual:). Donc, si on veut comparer des chaà®nes ou des NSNumbers, c'est celle-là  qu'il faut utiliser.


    - Il y en a un tas d'autres, pour comparer des flottants ou vérifier que des exceptions sont bien levées. Les fonctions sont décrites dans la doc de Xcode.


    Dans tous les cas, le dernier argument est optionnel. Il s'agit d'une chaà®ne pour expliquer quel était le résultat attendu. C'est utile trois mois plus tard pour comprendre pourquoi tu avais fait ce test.


     


    Après, tu verras qu'il y a des choses plus ou moins difficiles à  tester. En général la couche "Modèle" est facile à  tester, mais la couche "contrôleur" quasiment impossible. Donc, on va tendre à  vider les UIViewControllers au maximum, qui sont de toute façon ingérables autrement.

Connectez-vous ou Inscrivez-vous pour répondre.