OCMock 測(cè)試類方法
羅朝輝(http://www.shnenglu.com/kesalin)
CC許可,轉(zhuǎn)載請(qǐng)注明出處
使用 OCMock 進(jìn)行 unit test 時(shí),我們無法使用 stub 或 expect 測(cè)試類方法,那么又該怎樣測(cè)試類方法呢?
下面是一個(gè)解決辦法:在測(cè)試類中的非類方法 wrap 一下類方法,然后測(cè)試 wrap 方法。
比如:Utilities 有個(gè)類方法:
+ (NSString *) stringDate:(NSDate *)date withForamt:(NSString *)dateFormat;
我們?cè)?UtilitiesTests 測(cè)試類中新建一個(gè)同樣名稱的測(cè)試函數(shù),然后在該函數(shù)中轉(zhuǎn)調(diào) Utilities 的類方法,最后在 test 中對(duì)這個(gè) wrap 函數(shù)進(jìn)行測(cè)試:
// stringDate:withForamt
//
- (NSString *) stringDate:(NSDate *)date withForamt:(NSString *)dateFormat
{
return [UIHUtilities stringDate:date withForamt:dateFormat];
}
- (void) testStringDateWithFormat
{
UIHUtilitiesTests *realObject = [[[UIHUtilitiesTests alloc] init] autorelease];
id mock = [OCMockObject partialMockForObject:realObject];
NSDate * date = [[NSDate alloc] initWithTimeIntervalSince1970:0];
NSString * tgtFmt = @"yyyy/MM/dd";
NSString * tgtValue = @"1970/01/01";
NSString * returnValue = [mock stringDate:date withForamt:tgtFmt];
GHAssertEqualStrings(tgtValue, returnValue, @"Should have returned the expected formatted date in string format.");
}