2010-05-05 21 views
15

Bir sorunla karşılaşıyorum ve işleri doğru şekilde yaptığımı doğrulamak istedim.Xcode Birimi Testi - Uygulamanın paketindeki Kaynaklara erişme?

Basit şeyleri SenTestingKit testlerimle test edebilirim ve bu iyi çalışıyor. Bir Birim Test Paketi kurdum ve ana uygulama hedefine bağımlılık olarak ayarladım. Cmd + B'ye bastığımda tüm testleri başarıyla çalıştırır.

İşte burada konulara giriyorum. Uygulamanın bir parçası olarak kaynak klasöründen yüklemem gereken bazı XML dosyalarım var. İyi bir ünite test cihazı olarak, düzgün bir şekilde yüklendiklerinden emin olmak için bunun etrafında birim testleri yazmak istiyorum.

Yani şöyle bazı kodlar vardır:

NSString *filePath = [[NSBundle mainBundle] 
    pathForResource:@"foo" ofType:@"xml"]; 

uygulaması çalıştığında, ancak bir birim testi sırasında, yanlış demetine mainBundle puan, bu yüzden bu kod satırı nil döndüğünde bu çalışır. o Config parçası olması gerekiyor testi bile böyle bir kod derlemek için Bunun nedeni sırayla, ya da çalışmaz

NSString *filePath = [[NSBundle bundleForClass:[Config class]] 
    pathForResource:@"foo" ofType:@"xml"]; 

:

Yani böyle bilinen bir sınıf kullanmak için o kadar değişti Ünite Test Hedefinin Bunu eklerseniz, o sınıfın paketi Birim Test paketi olur. (Ugh!)

Bu yanlış yola mı yaklaşıyorum?

+0

Oluşturmayı deneyin ve daha sonra testleri çalıştırın. Bunun üzerine bir iTunes U videosu gördüm ve test hedefinin düzgün bir şekilde ayarlanmadığı durumlarda, test yaptıktan sonra bina yerine çalıştırıldığında son yapı üzerinde test yapılacağını söylediler. Durumun böyle olmadığından emin olmak için kontrol ettiniz mi? – Tacoman667

+0

Birim test projesini oluşturmayı deneyin? Birim test paketinin bir kısmı komut dosyalarını çalıştırmaktır, bu yüzden uygulamamın hedefinin bir bağımlılığı olarak kurdum. CMD + B daima testler yapmalıdır. –

cevap

20

Sorununuzu yeniden üretmeye çalışırken beni vurdu: Kaynaklarınızı yalnızca test paketinize eklemeyi denediniz mi? Bu senin için sorun olur mu? Tam olarak yaptım ve benim için harika çalıştı. Örneğin:

Kodu:

- (void)testBundleLoading { 
    NSLog(@"Main Bundle Path: %@", [[NSBundle mainBundle] bundlePath]); 

    for (NSBundle *bundle in [NSBundle allBundles]) { 
    NSLog(@"%@: %@", [bundle bundleIdentifier], 
        [bundle pathForResource:@"fire" ofType:@"png"]); 
    } 
} 

Çıktı:

2010-05-05 14:31:05.961 otest[16970:903] Main Bundle Path: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.3.sdk/Developer/usr/bin 
2010-05-05 14:31:05.962 otest[16970:903] (null): (null) 
2010-05-05 14:31:05.963 otest[16970:903] com.freetimestudios.KayakKingTests: /Volumes/FreeTime/KayakKing/build/Debug-iphonesimulator/KayakKingTests.octest/fire.png 

umarım bu yardımcı olur.

+0

Tam olarak neye ihtiyacım vardı, teşekkürler! –

+0

kullanışlı bir çember döngüdür. Teşekkürler! –

0

Xcode 4 ile bu soruna girdim ve benim problemim eski bir Xcode 3 projem vardı ve bir şekilde test hedefi için bilgi plânı eksikti. Projeye yeni bir UnitTests-Info.plist ekledim ve aniden kaynakları tekrar alabildim.