-[NSDate date]
'u çağıran bir yöntemi test ediyorum ve bazı mantık yapmak için sistem süresini referans olarak kullanıyorum. Mantığın yıl içinde belirli günlerde doğru olup olmadığını test etmem gerekiyor ama o güne kadar bekleyemem. Birim testi ne zaman sistem tarihini değiştirebilirim?Kakao birimi sınama için sistem tarihini değiştir
10
A
cevap
12
Mock object kullanmanız gerekiyor ve Objective C'de, yalnızca ihtiyacınız olan yöntemleri geçersiz kılarak kategorilerle kolayca yapabilirsiniz.
// ------------- File: NSDate+NSDateMock.h
@interface NSDate (NSDateMock)
+(void)setMockDate:(NSString *)mockDate;
+(NSDate *) mockCurrentDate;
@end
// -------------- File: NSDate+NSDateMock.m
#import "NSDate+NSDateMock.h"
@implementation NSDate (NSDateMock)
static NSDate *_mockDate;
+(NSDate *)mockCurrentDate
{
return _mockDate;
}
+(void)setMockDate:(NSString *)mockDate
{
_mockDate = [NSDate dateWithString:mockDate];
}
@end
ve ek olarak
Eğer SwizzleClassMethodvoid SwizzleClassMethod(Class c, SEL orig, SEL new) {
Method origMethod = class_getClassMethod(c, orig);
Method newMethod = class_getClassMethod(c, new);
c = object_getClass((id)c);
if(class_addMethod(c, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod)))
class_replaceMethod(c, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
else
method_exchangeImplementations(origMethod, newMethod);
}
gerekir ve ardından birim testinde bu
SwizzleClassMethod([NSDate class], @selector(date), @selector(mockCurrentDate));
[NSDate setMockDate:@"2007-03-24 10:45:32 +0200"];
NSLog(@"Date is: %@", [NSDate date]);
gibi kullanmak mümkün olacak: Örneğin aşağıdaki kategorisini kullanabilirsiniz
Genel olarak, belirli bir tarihi döndürmek için kategorideki '- [NS Tarih tarihi] 'ni geçersiz kılabilirsiniz. – brigadir