2011-12-15 14 views
8

Sto costruendo alcuni test Kiwi e ricevo un avviso che non riesco a spiegare. Sono nuovo di Kiwi.Test unità Kiwi: metodo di istanza '-attachToVerifier: verificatore:' non trovato

Ho una configurazione finto oggetto:

id conversationMock = [KWMock mockForProtocol:@protocol(Conversation)]; 
[conversationMock stub:@selector(end)]; 

E nel mio controller, una proprietà chiamata "conversazione":

@interface MyController() 
@property (nonatomic, assign) id<Conversation> conversation; 
@end 

Il mock viene assegnato alla proprietà, poi nelle specifiche I verificare se il metodo "fine" viene chiamato nella conversazione:

it(@"should end conversation", ^{ 
    [[[myController.conversation] should] receive] end]; 
    [myController stopTalking]; 
}); 

Il compilatore (LLVM 3. 0) sta mostrando un avvertimento: "Metodo istanza" -attachToVerifier: verificatore: "non trovato"

Qual è la causa di questo? È qualcosa che devo risolvere? (Test viene eseguito ok, controlla la chiamata al metodo al fine funziona bene)

risposta

12

Typecasting l'id di una NSObject si libera l'avvertimento:

[[(NSObject *) [myController.conversation] dovrebbe] ricevere] end ];

+0

Hanno lo stesso problema e questo ha risolto il problema. Tuttavia non c'è altro modo per risolverlo? Distrugge il vantaggio di facile lettura che il Kiwi ha rispetto agli altri framework di test. – Sunkas

+0

Mi piace ancora Kiwi, e lo sto usando molto negli ultimi 6 mesi e mi sono imbattuto occasionalmente in questo problema. Non lasciare che questo ti faccia cadere. –

+1

Ho trovato che questo è accaduto quando provavo a verificare su oggetti di tipo 'id ', tranne che in realtà causava un errore e non si compilava. Il lancio su 'NSObject *' ha fatto il trucco ma è brutto. –

9

Quello che dovete fare è:

build settings -> Other Linker flags 

aggiungere il flag: -all_load

+0

Vorrei alzare la risposta, ma potresti spiegare perché è necessario? – avelis

+1

-attachToVerifier: verificatore: è definito in una categoria su NSObject nel file NSObject + KiwiVerifierAdditions - (id) attachToVerifier: (id ) aVerifier;
-attachToVerifier: verificatore: è visibile al momento della compilazione, quindi l'applicazione viene compilata correttamente. L'avviso di LLVM è dovuto all'ID di fusione <-> NSObject Per quanto ne so, il linker Objective-C non carica gli oggetti che contengono solo categorie. -all_load forza il linker a caricare tutti i file oggetto esistenti, quindi alla fine caricherà il file oggetto che ha attachToVerifier ... Spero che questo aiuti. – Komposr

+0

Prima prova '-ObjC', che impone solo il caricamento da file oggetto con codice Objective-C. Questo flag non ha funzionato e '-all_load' è stata la soluzione alternativa (vedi Apple TN QA1490), ma sembra che funzioni bene ora. (Ho avuto l'errore dell'OP e questa risposta mi ha rammentato la memoria, ho provato '-ObjC' e ha risolto il problema.) –

1

Sulla base di @ Komposr risposta, ho guardato un paio di miei progetti con Kiwi e ha scoperto che avevo bisogno di fare le seguenti:

impostazioni di generazione -> Altre Bandiere Linker

aggiungere il flag: -ObjC

Nota che io sono NON USARE CocoaPods. Ho scaricato e compilato Kiwi come libreria statica che sto includendo ...