web-dev-qa-db-fra.com

Comment puis-je exécuter XCTest pour une application Swift à partir de la ligne de commande?

Je veux tester quelques Swift utilisant XCTest à partir de la ligne de commande si possible.

import XCTest

class LeapTest : XCTestCase {

    func testVanillaLeapYear() {
      let year = Year(calendarYear: 1996)
      XCTAssertTrue(year.isLeapYear);
    }
}

J'adorerais l'exécuter à partir de la ligne de commande.

J'ai déjà configuré Xcode pour utiliser les outils de développement de la version bêta:

Sudo xcode-select -s /Applications/Xcode6-Beta.app/Contents/Developer/

Si j'essaye naïvement de l'exécuter, ça se passe comme ça

$ xcrun Swift LeapTest.Swift
LeapTest.Swift:1:8: error: cannot load underlying module for 'XCTest'
import XCTest
       ^

Est-il possible de l'exécuter directement à partir de la CLI? Ou dois-je créer un projet Xcode?

32

J'ai pu obtenir la compilation de votre XCTestCase avec la commande suivante:

swiftc \
-F/Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks \
-Xlinker -rpath -Xlinker /Applications/Xcode6-Beta5.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Frameworks \
-lswiftCore LeapTest.Swift \
-o LeapTests

Ensuite, vous pouvez exécuter les tests avec xctest:

xcrun xctest LeapTests

Et pour décomposer ces options de ligne de commande swiftc:

  1. -F... ajoute XCTest.framework aux chemins de recherche du framework, ce qui permet de l'importer depuis Swift
  2. -Xlinker -rpath ... s'assure que la bibliothèque partagée XCTest peut être trouvée au moment du chargement
  3. Sans spécifier explicitement -lswiftCore, J'ai trouvé que xctest plantait quand il essayait d'exécuter la suite de tests

J'espère que cela pourra aider!

12
Adam Sharp

Je pense que le problème est que vous avez votre fichier test.Swift sous l'appartenance cible du projet principal. Assurez-vous que vos fichiers de test Swift appartiennent à la cible de test uniquement.

46
chourobin