+(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];
}
我正在努力为classMethod编写测试用例,因为当我运行OCUnit测试并将OCMock对象传递给classMethod时,输出将始终不同,因为我添加时间戳。 stub 类方法的最佳方法是什么 - getCurrentTimestamp?实际上是否可以存储正在测试的类的类方法?
我试过这样,但它不起作用:
id mock = [OCMockObject mockForClass:[MyClass class]];
[[[mock stub] andReturn:@1378468455] getCurrentTimestamp];
NSString *str = [MyClass classMethod:someMockObject];
答案 0 :(得分: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版本,将数字更改为字符串,和/或解释它是如何不适合您的?
答案 1 :(得分:0)
谢谢@BenFlynn。你的例子(以及我的)确实在起作用。问题是“MyClass.h”也在目标成员资格中检查了联合测试。 “MyClass.h”应该只针对项目(我不知道为什么,也许有人可以解释它)。