2011-04-20 7 views
5

मेरे पास मेरे ऐप में बहुत सारी कार्यक्षमता है जो दिनांक/समय निर्भर है (उदाहरण के लिए "यदि तारीख x है, तो y दिखाएं)। मैं उपयोगकर्ता की वर्तमान दिनांक/समय प्राप्त करने के लिए [NSDate दिनांक] का उपयोग करता हूं। मैं कार्यक्षमता का परीक्षण कर सकता हूं अपने आईफोन पर दिनांक/समय को मैन्युअल रूप से बदलकर, लेकिन मुझे आश्चर्य है कि वर्तमान समय को प्रोग्रामेटिक रूप से ओवरराइट करने का कोई तरीका है, इसलिए मैं सिम्युलेटर और अधिक तेज़ी से परीक्षण कर सकता हूं।परीक्षण उद्देश्यों के लिए ऐप के भीतर आईफोन दिनांक/समय सेट करें?

उत्तर

3

आप किसी भी तारीख के साथ एनएसडीएट ऑब्जेक्ट्स बना सकते हैं ।/समय आप चाहते हैं बस इस विधि प्राप्त करने के लिए "वर्तमान" समय के लिए एक विधि के माध्यम से और अंदर अपना कोड को चलाने या तो उत्पादन के लिए वास्तविक तारीख या परीक्षण के लिए अपनी पसंद के कुछ तारीख लौट

0

dateByAddingTimeInterval:।

एक नया एनएसडीएट ऑब्जेक्ट देता है जो रिसीवर के सापेक्ष किसी दिए गए सेकंड पर सेट होता है।

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds 

पैरामीटर सेकंड सेकंड की संख्या रिसीवर में जोड़ने के लिए। रिटर्नवर से पहले एक तिथि निर्दिष्ट करने के लिए सेकंड के लिए ऋणात्मक मान का उपयोग करें। रिटर्न वैल्यू एक नई एनएसडीएटी ऑब्जेक्ट जो रिसीवर के सापेक्ष सेकंड सेकेंड पर सेट है। लौटाई गई तारीख में रिसीवर से अलग प्रतिनिधित्व हो सकता है।

स्रोत: प्रलेखन: p

+2

मुझे नहीं लगता कि वह एक परीक्षण ढांचा विधि चाहता है बल्कि पूरे ऐप पर "रोल फॉरवर्ड" परीक्षण करने के लिए एक सिस्टम विधि चाहता है। यह ऐसा लगता है कि डेस्कटॉप यूनिट के सिस्टम समय को 1/1/2040 जैसे किसी चीज़ को सेट करके गैर-मोबाइल ऐप का परीक्षण करके यह देखने के लिए कि क्या कुछ तोड़ता है या नहीं। – TechZen

5

यह ऐसा करने का एक और तरीका है की + (NSDate *) की तारीख एक कस्टम कार्यान्वयन प्रदान करना है। आप JRSwizzle का उपयोग कर इस कक्षा विधि को घुमा सकते हैं। NSDate के लिए एक छोटा सा वर्ग बनाओ:

static NSTimeInterval seconds = 1300000000; 

@interface NSDate (Fixed) 
    + (NSDate *)fixedDate; 
@end 

@implementation NSDate (Fixed) 
+ (NSDate *)fixedDate 
{ 
    return [NSDate dateWithTimeIntervalSince1970:seconds]; 
} 
@end 

कोड जहां आप निश्चित तारीख करना चाहते हैं में तो निम्नलिखित करें:

NSError *error; 
[NSDate jr_swizzleClassMethod:@selector(date) withClassMethod:@selector(fixedDate) error:&error]; 
NSLog(@"Date:%@", [NSDate date]); 

इस बाहर लॉग प्रिंट:

2011-09-01 11:35:27.844 tests[36597:10403] Date:2011-03-13 07:06:40 +0000 
2

NSDate पर एक श्रेणी बनाएं और +[NSDate date] विधि

+ (instancetype)date 
{ 
    return [NSDate dateWithTimeIntervalSince1970:100000]; // Replace with any date you want 
} 
01 को ओवरराइड करें
संबंधित मुद्दे