繁体   English   中英

在单元测试中,验证使用参数NSData调用的函数(其中包含NSString)

[英]in unit test, verify function called with argument NSData (with a NSString in it)

我正在使用OCMock v3做单元测试,我想测试一个名为processInfo:的非常简单的函数,其实现如下所示:

@implementation MyService
-(void) processInfo{
  // get info file path
  NSString *infoFilePath = [self getInfoFile];
  // read info data from infoFile
  NSData *infoData = [[NSData alloc] initWithContentsOfFile:infoFilePath];

  // call another function to handle info data
  [self handleData:infoData];
}

-(void) handleData:(NSData*) infoData {
   ...
}

@end

如您所见, processInfo:函数获取信息文件路径并读取数据,然后调用handleData:(NSData*)函数。 很简单的逻辑。

我尝试通过以下方式测试上述简单功能:

-(void) testProcessInfo{
  // create dummy info string
  NSString* dummyInfoStr = @"dummy info";
  // convert above NSString to NSData object
  NSData* dummyInfoData = [dummyInfoStr dataUsingEncoding:NSUTF8StringEncoding];

  // get the same info file path
  NSString* infoFilePath=[self getInfoFile];
  // write dummy info data to info file
  [data writeToFile:path options:NSDataWritingAtomic error:nil];

  // CALL function under test
  [myServicePartialMock processInfo];

  // I want to verify that handleData:(NSData*) has been invoked with a NSData argument which contains dummy string @"dummy info"
  // BUT it failed, even though the real implementation does it.
  // For some reason the dummyInfoData is not considered equal to the NSData used in real implementation, though they both contain string @"dummy info"
  OCMVerify([myServicePartialMock handleData:dummyInfoData]);
}

我想验证是否使用包含伪字符串@"dummy info"NSData参数调用了handleData:(NSData*)函数,但是它失败了,即使实际实现确实通过读取的NSData对象调用了handleData:(NSData*)从文件,该文件确实包含NSString@"dummy info"

我的意思是看起来像OCMVerify() 只是无法验证它 ,是因为不从文件读取dummyInfoData吗?

我如何测试带有NSData类型参数(包含伪字符串@"dummy info" handleData:(NSData*)handleData:(NSData*)呢?

NSData旨在封装来自各种来源的多种格式的数据,因此,具有相同行为的两个NSData对象实际上不太可能是相同的。 在这种情况下,测试实例可能会保留NSString的副本,而实现实例可能至少要保留文件句柄,直到使用它为止。

在这种情况下,你可能想使用checkWithBlock:OCMArg ,一旦那里你可以检查类和内容。 您应该比较字符串而不是它们的NSData表示形式,因此要比较dummyInfoStr[[NSString alloc] initWithData: infoData, encoding: NSUTF8StringEncoding]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM