Question Comment créez-vous des extensions publiques, dans un cadre partagé, pour XCTest?


Par exemple, je n'utilise jamais la description de XCTestCase.expectation, donc je voudrais utiliser une fonction pour fournir une valeur par défaut, et indiquer clairement par un nom que je suis en train d’initialiser l’attente, car vous ne pouvez pas vraiment utiliser un initialiseur pour XCTestExpectation. Mais si l'extension n'est pas dans une cible de test, elle ne peut pas être compilée:

Impossible de charger le module sous-jacent pour 'XCTest'

import XCTest

public extension XCTestCase {
    func makeExpectation() -> XCTestExpectation {
        return expectation(withDescription: "")
    }
}

12
2017-07-21 03:41


origine


Réponses:


J'ai créé un xcworkspace ici (https://github.com/dtweston/TestFrameworkSample) qui démontre une solution à votre problème. Il y a deux projets dans cet espace de travail:

  1. Projet SampleApp avec une cible d'application iOS et une cible de test unitaire.
  2. Projet SharedTestFramework qui importe XCTest et déclare l'extension unique que vous avez insérée dans votre question.

La cible SampleAppTests est liée à SharedTestFramework pour pouvoir utiliser l'extension qu'elle définit. Le fichier de test unique importe le SharedTestFramework.

Avec ces étapes, je rencontre aussi le Cannot load underlying module for 'XCTest' lors de la construction du SharedTestFramework.

Le correctif pour cela est de mettre à jour le Framework Search Paths inclure "$(PLATFORM_DIR)/Developer/Library/Frameworks". Maintenant, SharedTestFramework compile correctement et, comme vous pouvez le voir dans l'espace de travail que j'ai téléchargé, la cible SampleAppTests peut être utilisée avec succès.

Réponse ancienne et cassée

Construisez-vous un framework séparé conçu pour être importé dans des cibles de test? Si tel est le cas, alors je pense que vous avez juste besoin de faire référence XCTest.framework à partir de ce cadre personnalisé, vous construisez.

D'un autre côté, si vous essayez d'ajouter cette extension à un framework utilisé par votre cible d'application, cela semble une mauvaise idée, car cela signifierait un lien XCTest.framework au binaire qui va au magasin et fonctionne sur les appareils des gens.

Je ne sais pas si c'est possible. Je suis plus confiant que ce n'est pas un scénario qu'Apple attend ou supporte.


8
2018-03-15 03:01