2011-12-15 18 views
8

Bazı Kiwi testleri yapıyorum ve açıklayamadığım bir uyarı alıyorum. Kiwi’de yeniyim. Kivi Spec Birimi Sınaması: Örnek yöntemi '-attachToVerifier: verifier:' bulunamadı

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

Ve benim denetleyicisi

bir özellik olarak adlandırılan "konuşma":

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

sahte Spec I, ardından özelliğine atanır

Ben sahte bir nesne kurulum yöntem "son" konuşma denir olmadığını kontrol edin:

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

derleyici (LLVM 3. 0) bir uyarı gösteriyor: "Örnek yöntemi" -attachToVerifier: verifier: 'bulunamadı "

Bunun nedeni nedir? Bu düzeltmem gereken bir şey mi?

[[(NSObject *) [myController.conversation]] almalıdır] sonu:

cevap

12

uyarı kurtulur bir NSObject için id Typecasting (son inşaat ok test Tamam çalışır, yöntem çağrıyı kontrol eder) ];

+0

Aynı problemi çözdüm ve bu sorunu çözdüm. Ancak bunu çözmenin başka yolu yok mu? Kiwi'nin diğer test çerçevelerine göre kolay okunan avantajını yok eder. – Sunkas

+0

Kivi'yi hala seviyorum ve son 6 ayda çok kullanıyorum ve sadece bu konuya zaman zaman rastladım. Bunun seni üzmesine izin verme. –

+1

Bunun bir hataya neden olması ve derleme yapmaması dışında 'id ' türünde nesneler üzerinde doğrulama yapmaya çalışırken bu durumun oluştuğunu tespit ettim. NSObject * 'e getirme hile yaptı ama çirkin. –

9

Ne yapmanız gereken geçerli:

build settings -> Other Linker flags 

bayrağı ekleyin: -all_load

+0

Bu yanıtı tekrarlamak istiyorum ama bunun neden gerekli olduğunu açıklayabilir misiniz? – avelis

+1

-attachToVerifier: verifier: NSObject dosyasındaki NSObject bir kategoride tanımlanır + KiwiVerifierAdditions - (id) attachToVerifier: (id ) aVerifier;
-attachToVerifier: verifier: uygulama derlendiğinde, derleme zamanında görünür. LLVM uyarısı, <-> NSObject 10 döküm kimliğinden kaynaklanmaktadır. Bildiğim kadarıyla, Objective-C bağlayıcısı yalnızca kategorileri içeren nesneleri yüklemez. -all_load, tüm mevcut nesne dosyalarını yüklemek için bağlayıcıyı zorlar, bu yüzden sonunda attachToVerifier… olan nesne dosyasını yükler. – Komposr

+0

İlk önce Objecty-C koduyla nesne dosyalarından yüklenmeyi zorlayan '-ObjC' öğesini deneyin. Bu bayrak işe yaramadı ve '-all_load' geçici bir çözümdü (bkz. Apple TN QA1490), ama şimdi iyi çalışıyor gibi görünüyor. (OP'nin hatası vardı ve bu cevap hafızamı kırdı; -ObjC'yi denedim ve sorunu çözdüm.) –

1

@ Komposr cevabı dayanarak, kivi ile benim projelerin birkaç baktım ve yapmak için gerekli olduğu tespit aşağıdaki:

Yapı ayarlar -> Diğer Bağlayıcı Bayrakları

Ben CocoaPods KULLANMAMA olduğumu -ObjC

Not:

bayrak ekleyin. Kiwi'yi indirdiğim ve derlediğim statik bir kitaplık olarak derledim ...

İlgili konular