मेरा मानना है कि यह जानना पूरी तरह से वैध है कि आप परीक्षण के अंदर चल रहे हैं या नहीं। ऐसे कई कारण हैं जिनकी वजह से यह मददगार हो सकता है। उदाहरण के लिए, रनिंग टेस्ट में, मैं एप्लिकेशन डेलीगेट में एप्लिकेशन-किया / विल-फिनिश-लॉन्चिंग विधियों से जल्दी लौटता हूं, जिससे परीक्षण तेजी से शुरू होता है कोड के लिए नहीं मेरी यूनिट परीक्षण के लिए। फिर भी, मैं अन्य कारणों की मेजबानी के लिए शुद्ध "तर्क" परीक्षण नहीं कर सकता।
मैं @Michael McGuire द्वारा वर्णित उत्कृष्ट तकनीक का उपयोग करता था। हालाँकि, मैंने देखा कि Xcode 6.4 / iOS8.4.1 के आसपास मेरे लिए काम करना बंद कर दिया (शायद यह जल्द ही टूट गया)।
अर्थात्, मैं XCInjectBundle को किसी भी समय परीक्षण के अंदर परीक्षण के दौरान खदान के ढांचे के लिए नहीं देखता। यही है, मैं एक परीक्षण लक्ष्य के अंदर चल रहा हूं जो एक रूपरेखा का परीक्षण करता है।
इसलिए, @Fogmeister दृष्टिकोण का उपयोग करते हुए, मेरी प्रत्येक परीक्षण योजना अब एक पर्यावरण चर निर्धारित करती है जिसे मैं जांच सकता हूं।
फिर, यहाँ मेरे पास एक कोड है जिसे कक्षा में बुलाया जाता है APPSTargetConfiguration
जो मेरे लिए इस सरल प्रश्न का उत्तर दे सकता है।
static NSNumber *__isRunningTests;
+ (BOOL)isRunningTests;
{
if (!__isRunningTests) {
NSDictionary *environment = [[NSProcessInfo processInfo] environment];
NSString *isRunningTestsValue = environment[@"APPS_IS_RUNNING_TEST"];
__isRunningTests = @([isRunningTestsValue isEqualToString:@"YES"]);
}
return [__isRunningTests boolValue];
}
इस दृष्टिकोण के साथ एक चेतावनी यह है कि यदि आप अपनी मुख्य ऐप योजना से एक परीक्षण चलाते हैं, जैसा कि XCTest आपको करने देगा, (अर्थात, आपकी एक परीक्षण योजना का चयन नहीं करना), तो आपको यह वातावरण चर सेट नहीं मिलेगा।