hakkında hemfikir değil Bir iPhone uygulaması için basit bir OCUnit testi ile oynuyordum ve sadece uygulama temsilcisinin, beklediğim sınıfın bir örneği olduğunu iddia etmek istedim. Bu testin çok yararlı olmasını beklemiyordum, ancak Objective C ile ilgili bir yanlış anlaşılmayı ortaya çıkarmıştım.isKindOfClass ve NSStringFromClass, UIApplicationDelegate
Öncelikle delege referansı alıyorum. Sonra geri gelen şeyin sınıf adını kaydederim. Benim durumumda, çıktı doğru olarak "app delegate'ın sınıf adı CalculatorAppDelegate" yazıyor. Bununla birlikte, bir sonraki satırdaki iddia başarısız olur ve nedenini anlamıyorum. isKindOfClass false döndürür iken
- (void)testAppDelegate
{
id appDelegate = [[UIApplication sharedApplication] delegate];
NSLog(@"app delegate's class name is %@", NSStringFromClass([appDelegate class]));
NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
NSLog(@"class == class %i", [appDelegate class] == [CalculatorAppDelegate class]);
STAssertTrue([appDelegate isKindOfClass:[CalculatorAppDelegate class]], @"wtf");
}
Hangi şartlar, NSStringFromClass() doğru sınıf adını döndürmek için neden olabilir? faydası ancak a eğer
NSLog(@"is it member? %i", [appDelegate isMemberOfClass:[CalculatorAppDelegate class]]);
emin: operasyonun dönüş değeri
NSLog(@"is it kind? %i", [appDelegate isKindOfClass:[CalculatorAppDelegate class]]);
ve hatta onun bir üyesi test edebilirsiniz neyin
2011-03-19 15:51:13.864 Calculator[40092:207] app delegate's class name is CalculatorAppDelegate
2011-03-19 15:51:13.864 Calculator[40092:207] is it kind? 0
2011-03-19 15:51:13.865 Calculator[40092:207] is it member? 0
2011-03-19 15:51:13.865 Calculator[40092:207] class == class 0
/Users/pohl/Developer/FoundationCalculator/CalculatorTests/CalculatorBrainTests.m:37: error: -[CalculatorBrainTests testAppDelegate] : "[appDelegate isKindOfClass:[CalculatorAppDelegate class]]" should be true. wtf
Test Case '-[CalculatorBrainTests testAppDelegate]' failed (0.002 seconds).
Bu projeyi XCode4'te yeni oluşturdum ve otomatik olarak birim test hedefini oluşturdum. Mükemmel bir şekilde çalışmakta olan pek çok iddiayla ilgili birkaç testim var. Sadece bu başarısız olan tek bir iddia. Hedefimin doğru şekilde ayarlanmamış olması hâlâ olabilir mi?Herhangi bir CalculatorTesting hedefi yok gibi görünüyor, bu yüzden yukarıdaki iddia bir cihazda çalışması gereken bir uygulama testi olarak adlandırdıkları şeydir? İlgili bir notta, bağlandığınız sayfadaki talimatlar XCode 4'ün hedefleri nasıl ayarladığıyla eşleşmiyor, bence. 4'te hedefler nasıl yapılacağına dair ipuçları var mı? – pohl
Hedeflerinizi doğru şekilde ayarlamadığınızdan eminim. Ben de Xcode 4 ile çalışıyorum ve sorununuzu test ettim. Xcode 4'te proje genel bakışında normal uygulama hedefinizi seçmeli ve çoğaltmalısınız (Cmd-D). CalculatorTesting adını verin ve OCUnit test hedefini bağımlılık olarak ekleyin. Aktif şemayı yeni hedefiniz olacak şekilde ayarlayın ve bu şemayı düzenleyin. Soldaki Testi seçin ve test paketinizi buraya ekleyin. Artık uygulama testlerinizi Cmd-U ile çalıştırabilirsiniz. – Felix
Bana zaman ayırdığınız için teşekkür ederim. Şemayı düzenlediğimde ve Test bölümüne baktığımda, CalculatorTests paketimin doğru bir şekilde listelendiğini görebilir ve tanımladığım test sınıflarını ve yöntemleri gösterir. Net olmak gerekirse: Birim testleri Cmd-U ile çalıştırabiliyorum. Toplam 38 iddia içeren 11 test yöntemim var ve bunların hepsi doğru çalışıyor ... bunun dışında. Doğru bir şekilde yapılandırılmış bir test hedefine sahip olmadıysam, soruma yapıştırdığım NSLog() iletileri bile çalıştırılmış olabilir mi? – pohl