2011-04-20 19 views
5

我在我的應用程序中有很多功能是依賴於日期/時間的(例如「如果日期是x,顯示y」)我使用[NSDate date]來獲取用戶的當前日期/時間。通過手動更改我的iPhone上的日期/時間,但我想知道是否有編程方式覆蓋當前時間,以便我可以在模擬器中更快地測試在應用程序中設置iPhone日期/時間用於測試目的?

回答

3

您可以使用任何日期創建NSDate對象。/你想只是時間通過一個方法來獲得「當前」時間和在此方法中運行代碼,要麼返回生產真正的日期或您選擇進行測試的一些日期

0

dateByAddingTimeInterval:

返回一個新的NSDate對象,該對象被設置爲相對於接收者的給定秒數。

- (id)dateByAddingTimeInterval:(NSTimeInterval)seconds 

參數 秒 的秒數添加到接收器。使用負數的秒數來讓返回的對象在接收者之前指定一個日期。 返回值 相對於接收方設置爲秒秒的新NSDate對象。返回的日期可能與接收者的表示不同。

來源:文檔:P

+2

我不認爲他想要一個測試框架方法,而是一個系統方法來對整個應用程序進行「前滾」測試。這就像當你測試一個非移動應用程序時,通過將桌面單元的系統時間設置爲1/1/2040之類的東西來查看是否會破壞某些東西。 – TechZen 2011-04-20 13:23:27

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 
} 
相關問題