2011-12-15 3 views
8

Estoy preparando algunas pruebas de Kiwi y recibiendo una advertencia que no puedo explicar. Soy nuevo en Kiwi.Kiwi Spec Unit Test: Método de instancia '-attachToVerifier: verifier:' not found

Tengo una configuración simulada objeto:

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

Y en mi controlador, una propiedad llamada "conversación":

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

El simulacro se asigna a la propiedad, a continuación, en la especificación I comprobar si el "fin" método se llama en la conversación:

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

el compilador (LLVM 3. 0) se muestra una advertencia: "método de instancia '-attachToVerifier: verificador:' no encontrado"

¿Cuál es la causa de esto? ¿Es esto algo que necesito solucionar? (Prueba se ejecuta bien, se comprueba la llamada de método a fin funciona bien)

Respuesta

12

Encasillamiento la identificación por un NSObject se deshace de la advertencia:

[[(NSObject *) [myController.conversation] debería] recibirá] finales ];

+0

Tienen el mismo problema, y ​​esto solucionó el problema. Sin embargo, ¿no hay otra forma de resolverlo? De alguna manera destruye la ventaja de fácil lectura que Kiwi tiene sobre otros marcos de prueba. – Sunkas

+0

Todavía me gusta Kiwi, y lo he estado usando mucho en los últimos 6 meses y solo me he encontrado con este problema de vez en cuando. No dejes que este te deprima. –

+1

Descubrí que esto sucedió cuando intentaba verificar en objetos del tipo 'id ', excepto que en realidad causaba un error y no se compilaba. Casting a 'NSObject *' hizo el truco pero es feo. –

9

Lo que hay que hacer es:

build settings -> Other Linker flags 

Añadir la bandera: -all_load

+0

Me gustaría votar esta respuesta pero ¿podría explicar por qué es necesario? – avelis

+1

-attachToVerifier: verificador: se define en una categoría en NSObject en el archivo NSObject + KiwiVerifierAdditions - (id) attachToVerifier: (id ) aVerifier;
-attachToVerifier: verifier: es visible en tiempo de compilación para que la aplicación compile bien. La advertencia de LLVM se debe a la id. De conversión <-> NSObject Según lo que sé, el vinculador Objective-C no carga objetos que contienen solo categorías. -all_load obliga al enlazador a cargar todos los archivos de objeto existentes para que eventualmente cargue el archivo de objeto que tiene attachToVerifier ... Espero que esto ayude. – Komposr

+0

Primero intente '-ObjC', que solo fuerza la carga desde archivos de objeto con el código Objective-C. Esta bandera no solía funcionar, y '-all_load' era la solución (ver Apple TN QA1490), pero parece funcionar bien ahora. (Tuve el error del OP y esta respuesta me revolvió la memoria; intenté '-ObjC' y solucionó el problema.) –

1

Sobre la base de la respuesta de @ Komposr, miré a un par de mis proyectos con kiwi y descubrí que tenía que hacer los siguientes:

configuración de generación -> Otras banderas Linker

añadir la bandera: -ObjC

Nota que soy NO USAR CocoaPods. He descargado y compilado Kiwi como una biblioteca estática que estoy incluyendo ...

Cuestiones relacionadas