web-dev-qa-db-fra.com

Xcode 6 Editor ne reconnaît pas les tests unitaires

J'ai un problème avec le Xcode IDE 6 qui ne détecte pas correctement les scénarios de test de mon unité Swift. Lorsque je lance les tests unitaires, tous les tests ont été exécutés.

Mais dans IDE lors de l'édition, les tests unitaires ne sont pas reconnus. Je dois exécuter toute la suite de tests unitaires pour pouvoir exécuter un seul test.

Je n'arrivais pas à comprendre comment éviter ce problème.

enter image description here

51
ChaosSpeeder

Problème résolu. Tout ce que j'ai à faire est de lancer la fenêtre "Fenêtre -> Projets" et de supprimer les "Données dérivées. Après l'indexation, tous les tests fonctionnent. 

En attendant, Apple corrige peu à peu les bogues de l'éditeur Xcode 6.3. 

56
ChaosSpeeder

Pour moi, le correctif consistait à préfixer toute méthode avec "test"

c'est à dire. 

func arrayResponseCall() 

devrait être: 

func testArrayResponseCall()
20
Antoine

La "solution" pour moi était d'ajouter un nouveau test. J'ai inventé des bêtises:

func testThatNothing() {
    XCTAssertTrue(true, "True should be true")
}

Lorsque j'ai relancé les tests, tous les tests de ce fichier ont été reconnus par l'éditeur. J'ai supprimé le test bidon et tout va bien. Malheureusement, je devais le faire dans chaque fichier, mais au moins cela fonctionne. J'espère que ça aide quelqu'un.

13
Reid

Voici quelques solutions à ce problème:

  1. Attendez quelque temps. Il faut parfois du temps pour charger le diamant. Naviguez entre différents fichiers, puis passez au même cas de test, il devrait apparaître.

  2. Nettoyer le projet, Nettoyer le dossier de construction et même Supprimer le contenu des données dérivées. Cochez comment supprimer les données dérivées en toute sécurité.

  3. Quittez Xcode et ouvrez-le à nouveau.

  4. Assurez-vous que votre nom de test test commence partestFunc_Name

  5. Parfois, votre fichier test-case peut contenir une fonction autre que test-case. Dans un tel scénario, le symbole en losange n'apparaît pas. Remove such function.

Dans mon cas, les solutions 1, 3 et 5 ont souvent fonctionné pour moi.

8
Jayprakash Dubey

J'ai eu le même problème aussi. Assurez-vous simplement que chacun de vos cas de test contient une sorte d’instruction XCTAssert ().

func testSomething(){
     XCTAssert(true, "Pass")
}
6
Ernest Han

(Comme votre commentaire indique que vous rencontrez toujours ce problème après une semaine, cela ne vous aidera peut-être pas, mais…)

J'ai rencontré ce problème où l'ajout d'un nouveau test (Swift) dans la version 6.1 ne le ferait pas apparaître dans "Test Navigator" ou dans l'éditeur de schémas. Le redémarrage de Xcode a résolu le problème et je peux maintenant exécuter les tests individuellement.

3
Sophie Alpert

Assurez-vous que le nom du scénario de test commence par "test" suivi du nom de votre choix et construisez (cmd + B) le projet. Le losange apparaîtra !!.

3
Akila Wasala

Xcode 7

Ma réponse complète est ici .

Dans Xcode 7, la configuration des tests unitaires est un peu plus facile que dans Xcode 6 (inutile d'annoter la classe et les méthodes en tant que public). Utilisez @testable avant l'importation du nom de la classe.

import XCTest
@testable import MyProject

class MyClassTests: XCTestCase {

    func testMyMethod() {

        let myClass = MyClass()
        let sum = myClass.addTwoNumbers(1, 2)

        XCTAssertEqual(sum, 3)
    }
}

Dans votre classe, vous n'avez rien de spécial à faire.

class MyClass {

    func addTwoNumbers(a: Int, b: Int) -> Int {
        return a + b
    }
}

Il est possible que vous deviez également définir "Module de définition" sous Emballage sur OUI pour les paramètres de construction de votre application.

Voir aussi ces réponses:

3
Suragch

J'ai eu une erreur similaire (bien qu'en Objective C, pas Swift). Si j'ajoutais une nouvelle méthode de test à la classe, celle-ci n'apparaîtrait pas dans le navigateur de test et ne serait pas exécutée lorsque j'exécuterais l'ensemble du bundle. Je n’obtiendrais pas non plus ces points dans la barre latérale à côté de chaque méthode qui, si on cliquait dessus, n’exécuterait qu’une seule méthode de test. 

La seule chose qui résolve mon problème est de supprimer toute ma classe de test (enregistrer son contenu ailleurs temporairement), puis de recréer la classe de test et (peut-être plus soigneusement?) De redéfinir les paramètres de construction. 

2
Olivia Stork

Pour moi, il suffisait de sélectionner Product->Test et d'attendre un peu. Quand les tests commencent à courir, tous les diamants deviennent disponibles

1
Andrey Chernukha

Lorsque vous ajoutez un nouveau test, enregistrez le fichier (Cmd + S) et le losange apparaîtra (vérifié sur Xcode 7.3)

1
Mike Taverne

Parfois, il vous suffit d'attendre que Xcode ait fini d'indexer tous vos fichiers. Pour les grands projets, la vue du navigateur de test unitaire est souvent vide jusqu'à la fin.

1
Ari Braginsky

Pour moi, je dois ajouter des tests à ci-dessous ici  enter image description here

1
Stephen Chen

J'ai résolu mon problème en changeant simplement les méthodes private en public

Donc, si vous rencontrez le même problème, changez:

private func testString()

à:

public func testString()
0
Alcivanio