2011-12-15 13 views
8

Buduję testy Kiwi i otrzymuję ostrzeżenie, którego nie potrafię wyjaśnić. Jestem nowy w Kiwi.Test jednostki Kiwi Test: Metoda instancji "-attachToVerifier: verifier:" nie została znaleziona

Mam mock konfigurację obiektu:

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

I w moim kontrolera, właściwość zwaną "rozmowy":

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

pozornie jest przypisana do nieruchomości, a następnie w spec I sprawdź, czy w konwersacji wywołano metodę "koniec":

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

Kompilator (LLVM 3. 0) pokazuje ostrzeżenie: "Metoda instancji" -attachToVerifier: verifier: 'not found "

Co jest tego przyczyną? Czy to jest coś, co muszę naprawić? (Test działa ok, sprawdza wywołanie metody do końca działa ok)

Odpowiedz

12

typecasting identyfikator do NSObject pozbywa się ostrzeżenie:

[[(NSObject *) [myController.conversation] powinien] otrzymywać] Koniec ];

+0

Mam ten sam problem, a to naprawiło problem. Czy nie ma innego sposobu na rozwiązanie tego problemu? To niszczy łatwą do odczytania przewagę Kiwi nad innymi frameworkami testowymi. – Sunkas

+0

Nadal lubię Kiwi, i używam go dużo w ciągu ostatnich 6 miesięcy i od czasu do czasu pojawia się tylko w tym wydaniu. Nie pozwól, aby ten cię zawiódł. –

+1

Znalazłem to podczas próby sprawdzenia na obiektach typu 'id ', z wyjątkiem tego, że faktycznie spowodował błąd i nie skompilował. Przesyłanie do 'NSObject *' działało, ale było brzydkie. –

9

Co trzeba zrobić, to:

build settings -> Other Linker flags 

dodać flagę: -all_load

+0

Chciałbym uzyskać odpowiedź na to pytanie, ale czy mógłbyś wyjaśnić, dlaczego jest to potrzebne? – avelis

+1

-attachToVerifier: verifier: jest zdefiniowany w kategorii na NSObject w pliku NSObject + KiwiVerifierAdditions - (id) attachToVerifier: (id ) aVerifier;
-attachToVerifier: verifier: jest widoczny podczas kompilacji, więc aplikacja kompiluje się poprawnie. Ostrzeżenie LLVM wynika z tego, że identyfikator rzutowania jest następujący: Z tego, co wiem, linker Objective-C nie ładuje obiektów zawierających tylko kategorie. -all_load zmusza łącznik do załadowania wszystkich istniejących plików obiektów, aby w końcu załadować plik obiektu, który ma attachToVerifier ... Mam nadzieję, że to pomoże. – Komposr

+0

Najpierw spróbuj '-ObjC', który wymusza ładowanie z plików obiektów tylko z kodem Objective-C. Ta flaga nie działała, a '-all_load' było obejściem problemu (patrz Apple TN QA1490), ale teraz działa dobrze. (Miałem błąd PO, a ta odpowiedź sprawiła, że ​​zapadła mi pamięć, próbowałem '-ObjC' i naprawiłam problem.) –

1

W oparciu o użytkownika @ Komposr odpowiedź, spojrzałem na kilka moich projektów z kiwi i okazało się, że muszę zrobić następujące:

Ustawienia Build -> Pozostałe Flagi Linker

dodać flagę: -ObjC

Uwaga że jestem nieużywania CocoaPods. Pobrałem i skompilowałem Kiwi jako statyczną bibliotekę, którą włączam ...

Powiązane problemy