2013-09-06 6 views
0
+(NSString *) classMethod:(id)someDataObject 
{ 
    NSString *returnStr; 

    //do something with someDataObject and set returnStr 
    //...  

    returnStr = [NSString stringWithFormat:@"%@%@", returnStr,[self getCurrentTimestamp]]; 

    return returnStr; 
} 

+ (NSString *)getCurrentTimestamp 
{ 
    NSNumber *t = [NSNumber numberWithLong:[[NSDate date] timeIntervalSince1970]]; 
    return [t stringValue]; 
} 

Я изо всех сил, чтобы написать тестовый пример для Метод класса, потому что, когда я запускаю тест OCUnit и передать объект OCMock на classMethod выход всегда будет отличаться, как добавить метку времени. Каков наилучший подход к stub метод класса - getCurrentTimestamp? Действительно ли можно отключить методы класса тестируемого класса?OCMock методы класса заглушки класса, который испытывается

Я попытался, как это, но он не работает:

id mock = [OCMockObject mockForClass:[MyClass class]]; 
[[[mock stub] andReturn:@1378468455] getCurrentTimestamp]; 

NSString *str = [MyClass classMethod:someMockObject]; 
+0

Я заметил, что ваш заглушка возвращает NSNumber, а не и NSString - не уверен, что это проблема ... –

ответ

0

Спасибо @BenFlynn. Ваш пример (как и мой) работает действительно. Проблема заключалась в том, что «MyClass.h» также был проверен в целевом членстве для теста объединения. «MyClass.h» должен ориентироваться только на проект (я не уверен, почему, может быть, кто-то может это объяснить).

1

Это прекрасно работает для меня:

+(NSString *) classMethod:(id)someDataObject 
{ 
    NSString *returnStr = @"prefix-"; 
    returnStr = [NSString stringWithFormat:@"%@%@", returnStr,[self getCurrentTimestamp]]; 
    return returnStr; 
} 

+ (NSString *)getCurrentTimestamp 
{ 
    NSNumber *t = [NSNumber numberWithLong:[[NSDate date] timeIntervalSince1970]]; 
    return [t stringValue]; 
} 

- (void)testClass 
{ 
    id mock = [OCMockObject mockForClass:[Bar class]]; 
    [[[mock stub] andReturn:@"1378468455"] getCurrentTimestamp]; 
    NSString *str = [Bar classMethod:nil]; 
    NSLog(@"Str: %@", str); 
} 

// Result: 
// Str: prefix-1378468455 

Можете ли вы подтвердить свой OCMock версию, измените число в строку, и/или объяснить, как он не работает для вас?

+0

Эй, @ Бэн Флин, вы, кажется, хороший парень .. проверьте [это] (http: // stackoverflow.com/questions/19287673/cannot-stub-class-method-with-ocmock) очень похожая проблема – abbood

Смежные вопросы