2015-06-22 5 views
7

Ho un framework/modulo scritto in Objective-C e voglio testare le sue interfacce esterne e interni in Swift. Per questo ho creato un nuovo target di test nello stesso progetto, mirando al framework. Nel codice Swift posso importare il modulo e utilizzare le classi pubbliche senza problemi. Tuttavia, non riesco ad accedere alle classi interne nei miei test.Come testare gli interni di un framework Objective-C con Swift

ho provato la seguente:

  • ho impostato la visibilità delle fonti interne al "progetto". Per quello che ho capito dovrebbe renderli disponibili al codice nello stesso progetto. Tuttavia, non funziona. O devo importarli in modo diverso allora?
  • Ho anche provato la nuova funzione @testable import di Swift 2 in Xcode 7, ma non sembra funzionare (ancora) per i framework Objective-C.

Quello che mi è venuto è di importare manualmente tutte le fonti private che voglio testare nell'intestazione del bridging della destinazione del test. Che funzioni. Tuttavia, non sembra che sia il modo previsto per testare un framework Objective-C con Swift.

Qualche idea su come farlo meglio?

+0

Frank: sono visibili internals aggiungendo istruzioni di importazione per le intestazioni nell'intestazione Bridging del progetto di test. E 'questo quello che stai facendo? Il mio problema principale è un po 'più esoterico del tuo. Riesco a vedere tutti i metodi interni purché non abbiano parametri. Hai visto qualcosa di simile? – JTango18

+0

Hmm, questo è strano. Sì, li ho appena importati nell'intestazione di bridging del target di test e no, non ho ancora riscontrato problemi di questo tipo. Stai usando liste di argomenti variadici? Perché Swift non può convertire quei metodi. Inoltre, a volte solo il completamento automatico in Xcode non funziona, ma il codice viene comunque compilato. Hai provato? –

+0

Per quanto ho capito, le intestazioni di bridging, questo è il modo per esporre le intestazioni private a swift, mentre le intestazioni pubbliche sono esposte tramite l'intestazione a ombrello del framework. –

risposta

1

Il modo in cui ho gestito tali problemi in passato è rendere pubbliche le classi all'interno del framework che sottoclasse le classi interne che si desidera testare. È possibile aggiungere i flag del compilatore per crearli solo con debug o configurazioni di test.

Ad esempio, se si disponesse di una classe denominata SomeClass, si avrebbe SomeClassTest che sovrascriverebbe tutti i metodi pubblicamente. Questo ti dà anche la possibilità di includere facilmente la logica di test, come l'inserimento di dati fittizi dove necessario, ecc.

0

Mi sono imbattuto nello stesso problema.

Ho lavorato intorno definendo un'estensione Objective C come un helper di test che aggiunge solo le definizioni dei metodi che voglio testare. Quindi ho aggiunto l'intestazione dell'estensione all'intestazione del bridging.

Ad esempio:

#import "ClassIWantToTest.h" 
    @interface ClassIWantToTest (Internals) 

     - (BOOL)privateMethodToTest; 

    @end 

E nell'intestazione colmare:

// 
// Use this file to import your target's public headers that you would like to expose to Swift. 
// 
#import "ClassIWantToTest.h" 
#import "ClassIWantToTest+Internals.h" 

Non buono come @testable, ma meno invadente rispetto sottoclassi e l'estensione può essere definita nel vostro target di test in modo non devi preoccuparti di armeggiare con i flag del compilatore.

Problemi correlati