Böyle büyük mükafat 4: komut satırından testleri (xcodebuild) Çalıştırmak?
4, birim testleri dahil iOS Güncellemelerinden yepyeni bir proje oluşturduk. Varsayılan uygulama 2 hedefler, ana uygulama ve birim test paketi var. Kullanarak " ^ Ürün . Test" (Command-U) uygulama oluşturur, kurar, bir birim test paketi, iOS simülatörü başlattı ve testler çalışır. Şimdi komut satırından aynı şeyi yapmak istiyorum. Komut satırı aracı (xcodebuild) yok "test" eylem, ama göründüğü gibi öğrenebilirim yapı birim test paketi hedef doğrudan yana uygulamaya bağlıdır kendisi. Ancak, çalışan:
xcodebuild -target TestAppTests -sdk iphonesimulator4.3 -configuration Debug build
aşağıdaki mesajı verir:
/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/Tools/RunPlatformUnitTests:95: warning: Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set).
Bu Test Ana GUI Komut-U çalıştırdığımda birim test paketi hedefim için ayarlanır beri bir yalan gibi görünüyor. Mantık testleri ve uygulama testleri arasındaki ayrımı hakkında önceki mesajları gördüm, ama böyle büyük mükafat 4 Bu ayrım ortadan kalkıyor gibi görünüyor. Komut satırından testleri çalıştırmak için nasıl herhangi bir ipucu?
CEVAP
ÖNEMLİ NOT
5.1 (belki daha önce böyle büyük mükafat olarak) böyle büyük mükafat test
geçerli bir yapı eylemdir.
Tüm aşağıda -destination
uygun seçenekler ile test oluştur eylemini kullanarak xcodebuild çağrısı ile ve hack değiştirmek için başardık. Daha fazla bilgi için man xcodebuild
.
Aşağıdaki bilgiler buraya gelecek kuşaklar için bıraktı
Belirtildiği gibi Apple senaryolarını birim testleri çalıştırmak için hack çalıştım
Running Xcode 4 unit tests from the command line
ve
Xcode4: Running Application Tests From the Command Line in iOS
web üzerinde çok sayıda benzer kayıtlar.
Ancak, bu çözümlerin bir sorun ile karşılaştım. Bazı birim testleri icra iOS Anahtarlık ve arayan çalışırken çevre gelir hack, Apple'ın komut, başarısız bir hata (errSecNotAvailable
[-25291] çok garip). Sonuç olarak, testler her zaman... bir testte istenmeyen bir özellik başarısız oldu.
Web üzerinde başka bir yerde buldum çözümleri bilgilere dayanarak bir dizi denedim. Bu çözümlerin bazı iOS simülatörü güvenlik hizmetleri daemon başlatmak için çalışıyor, örneğin dahil. Bunlarla uğraştıktan sonra, Benim en iyi bahis simülatörü ortamı tam verim ile iOS simülatörü çalıştırmak gibi görünüyordu.
Yaptım, oldu iOS Simülatör aracı fırlatma ulaşmaya çalış o zaman ne 21**. Bu komut satırı aracı, özel Elma çerçeveler komut satırından bir iOS uygulamasını başlatmak için kullanır. Bana özellikle, ancak, bana baåÿlattä uygulaması için Ortam Değişkenleri ve Komut Satırı Argümanları hem geçmesini sağlar aslında.
Ortam değişkenleri rağmen, Birim Test bohçam benim Uygulama içine almak mümkün oldu. Komut satırı argümanları, geçebilir "-SenTest" uygulaması birim testleri çalıştırmak ve çıkmak için almak için gerekli.
Düzeni ben yarattım aradım ("") CommandLineUnitTests birliğim için paket Test ve "eylem mesaj yukarıda açıklandığı gibi bir bölüm oluşturun. Çalışma işaretli
Apple'ın komut kesmek yerine, olsa, uygulama, ios-sım kullanarak başlatır ve çevre ayarlayan bir senaryoyu uygulamaya birim test bohçam ayrı ayrı enjekte etmek için yerini aldı.
Benim komut dosyası BASH betik benim için çok tanıdık olan Ruby ile yazılmış. İşte o senaryo:
if ENV['SL_RUN_UNIT_TESTS'] then
launcher_path = File.join(ENV['SRCROOT'], "Scripts", "ios-sim")
test_bundle_path= File.join(ENV['BUILT_PRODUCTS_DIR'], "#{ENV['PRODUCT_NAME']}.#{ENV['WRAPPER_EXTENSION']}")
environment = {
'DYLD_INSERT_LIBRARIES' => "/../../Library/PrivateFrameworks/IDEBundleInjection.framework/IDEBundleInjection",
'XCInjectBundle' => test_bundle_path,
'XCInjectBundleInto' => ENV["TEST_HOST"]
}
environment_args = environment.collect { |key, value| "--setenv #{key}=\"#{value}\""}.join(" ")
app_test_host = File.dirname(ENV["TEST_HOST"])
system("#{launcher_path} launch \"#{app_test_host}\" #{environment_args} --args -SenTest All #{test_bundle_path}")
else
puts "SL_RUN_UNIT_TESTS not set - Did not run unit tests!"
end
Komut satırından çalışan bu gibi görünüyor:
xcodebuild -sdk iphonesimulator -workspace iPhoneApp.xcworkspace/ -scheme "CommandLineUnitTests" clean build SL_RUN_UNIT_TESTS=YES
SL_RUN_UNIT_TESTS
ortam değişkeni için baktıktan sonra, senaryoyu "launcher" (iOS-sım çalıştırılabilir) projenin kaynak içinde ağacı. bulur O zaman Birim Test benim Paket Güncellemelerinden ortam değişkenleri geçen oluşturma ayarları temel yolunu oluşturur.
Sonra, birim enjekte çalışan uygulamam için çalışma zamanı Ortam Değişkenleri kümesi, paket test oluşturun. Yukarı yazısının ortası environment
karma değişkenleri kurdum ruby grunge ios-sim
uygulama için komut satırı argümanları bir dizi içine katılmak için kullanın.
Yakın altına alın TEST_HOST
ortamı olarak uygulamasını istiyorum başlatmak ve system
komut aslında yürütür ios-sim
geçen uygulama, komut bağımsız değişkenleri ayarlamak için çevre ve argümanlar -SenTest All
ve test paket yolu çalışan uygulama.
Bu planın avantajı Güncellemelerinden kendisi inandığım kadar simülatör ortamında birim testleri çalıştırır. Düzeni aleyhine uygulamayı başlatmak için harici bir araç kullanır. Harici araç özel Apple çerçeveler kullanır, sonraki işletim sistemi sürümleri ile kırılgan olabilir, ama şu an için çalışıyor.
P. S. ben" anlatı sebep, ama övgü bir sürü için bu yazı bana çok şey ile bu problem ile çalışan suç, Pawel, benim de ortak gider "kullandım
Böyle büyük mükafat Servisi (Mavericks...
Böyle büyük mükafat "Yapı ve Arşi...
Böyle büyük mükafat 6 - komut satırınd...
Nasıl böyle büyük mükafat başlatmadan ...
Böyle büyük mükafat 6 proje yeniden ad...