2015-11-19 94 views
1

概述:NSData的比較

有一種函數f1返回NSData

有沒有一種方法可以編寫測試用例來測試返回NSData的函數?

如何創建變量expectedOutput(請參考下面的代碼)?

例子:

@interface Car : NSObject 

- (NSData*) f1; 

@end 

@implementation Car 

- (NSData*) f1 { 

    NSData *someData = [[NSData alloc] init]; //This is just an example, the real code has some logic to build the NSData 

    return someData; 
} 

@end 

測試用例:expectedOutput的建設

- (void) test { 
    Car *c1; 

    NSData *actualOutput = [c1 f1]; 
    NSData *expectedOutput = ??? //How can I build this NSData ? 

    XCTAssertEqualObjects(actualOutput, expectedOutput); 
} 

回答

0

步驟

  1. expectedOutputNSData)到文件(一次)
  2. 在測試的情況下讀取該文件,並填充expectedOutput
  3. 比較expectedOutputactualOutput

步驟1:

- (void) writeExpectedDataToFile {} 

     //Write expected data to file (to be done only once) 
     NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *docsDir = [dirPaths objectAtIndex:0]; 
     NSString *databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"expected.txt"]]; 

     [data writeToFile:databasePath atomically:YES]; 
    } 

步驟2:

- (void) test { 
     Car *c1; 

     NSData *actualOutput = [c1 f1]; 

     //Reading from file 
     NSBundle* bundle = [NSBundle bundleForClass:[self class]]; 
     NSURL* fileName1 = [bundle URLForResource:@"expected" withExtension:@"txt"]; 
     NSData *expectedData = [NSData dataWithContentsOfFile:[fileName1.path stringByExpandingTildeInPath]]; 

     XCTAssertEqualObjects(actualOutput, expectedOutput); 
} 
0

方法取決於NSData的內容。它應該基於f1的含義。
如果您不知道該類型的數據應該生成f1,則可以檢查返回的NSData的長度和類別(如果知道長度以字節爲單位)。
如果您知道,f1會將某些字符串編碼爲數據,您可以生成目標字符串,並將生成的字符串與從返回的數據創建的字符串進行比較。
如果您知道,應該生成此函數的字節序列(例如,您對其他語言具有相同的函數,或者具有標準符號字節),則可以將光盤中的字節加載到NSData,並將其與actualOutput進行比較。