web-dev-qa-db-fra.com

Exemple de test d'interface utilisateur Xcode

Je viens d'apprendre récemment nit Testing in Xcode . Maintenant, j'essaie Xcode 7 et je vois qu'il y a un nouveau groupe pour les tests d'interface lorsque je crée un nouveau projet.

enter image description here

J'ai regardé la vidéo WWDC 2015 et c'était plutôt bien, mais avez-vous un exemple super simple que je pourrais passer par moi-même? Les exemples vidéo étaient un peu trop complexes pour moi.

Notes

18
Suragch

Utilisez Tests unitaires pour tester la validité des méthodes dans vos classes. Vous les utilisez pour tester le code que vous avez écrit. (Voir mon autre exemple pour configurer un test unitaire simple dans Xcode.)

Utilisez Tests d'interface utilisateur pour vérifier la validité de l'interface utilisateur. Pensez-y comme avoir votre propre robot pour passer et faire toutes les interactions normales avec votre application qu'un utilisateur normal ferait. Cela vous fait gagner du temps de le faire vous-même.

Au moment d'écrire ces lignes, il est difficile d'accéder à de nombreuses propriétés des composants de l'interface utilisateur, mais le simple fait de passer un test en les touchant et en les balayant confirme qu'ils sont là.

Exemple

Il s'agit de la configuration et du test d'interface utilisateur les plus simples auxquels je pouvais penser: un bouton qui, une fois enfoncé, modifie le texte d'une étiquette.

Installer

  • Créez un nouveau projet dans Xcode 7+ pour iOS 9.0+.
  • Assurez-vous que l'option Inclure les tests d'interface utilisateur est cochée

enter image description here

  • Si vous ajoutez des tests d'interface utilisateur à un projet créé avant Xcode 7, voir cette réponse . (Fichier> Nouveau> Cible> Test> Bundle de tests Cocoa Touch UI)

  • Ajoutez un UILabel et un UIButton au storyboard

enter image description here

  • Créez un @IBOutlet et @IBAction dans ViewController et modifiez le texte label lorsque vous appuyez sur button.

    import UIKit
    class ViewController: UIViewController {
        @IBOutlet weak var label: UILabel!
        @IBAction func button(sender: AnyObject) {
            label.text = "Hello"
        }
    }
    

Faites le test

  • Ouvrez le fichier YourProject UITests.

enter image description here

  • Placez votre curseur dans la méthode testExample(). (Vous pouvez supprimer les commentaires)

enter image description here

  • Appuyez sur le bouton rouge d'enregistrement

enter image description here

  • Dans l'application, (1) appuyez sur l'étiquette, (2) appuyez sur le bouton, puis (3) appuyez à nouveau sur l'étiquette. (4) Appuyez à nouveau sur le bouton Enregistrer pour arrêter l'enregistrement. Le code suivant aurait dû être généré automatiquement pour vous:

    func testExample() {
    
        let app = XCUIApplication()
        app.staticTexts["Label"].tap()
        app.buttons["Button"].tap()
        app.staticTexts["Hello"].tap()
    }
    
  • Utilisez les lignes staticText comme point de départ pour créer un XCTAssert. Vous devriez maintenant avoir:

    func testExample() {
    
        let app = XCUIApplication()
        XCTAssert(app.staticTexts["Label"].exists)
        app.buttons["Button"].tap()
        XCTAssert(app.staticTexts["Hello"].exists)
    }
    
  • Appuyez sur le losange sur la gauche pour exécuter le test d'interface utilisateur. Il devrait devenir vert quand il passe.

enter image description here

  • C'est tout! Cela a montré que les UIButton et UILabel existent et que le texte de l'étiquette a changé. Si vous voulez le voir échouer (une bonne idée), vous pouvez remplacer "Bonjour" par autre chose.

Une étude plus approfondie

46
Suragch

@ Suragch +1 pour la réponse. Une chose que j'ai observée et que je veux partager, c'est que chaque fonction à l'intérieur du scénario de test de l'interface utilisateur doit commencer par "test". Vous pouvez ajouter un nom supplémentaire après cela. Ce n'est qu'ainsi que le bouton (pour cliquer pour démarrer le test) apparaît.

7
Himanshu Garg