ios – 如何根据SDK更改的方法创建单元测试?

ios – 如何根据SDK更改的方法创建单元测试?,第1张

概述我需要让我的iOS lib与iOS 6兼容,所以我使它向前兼容iOS 7中可用的库,这使我的生活更轻松(最终让我删除旧代码). 例如,iOS 7中提供了原生base64编码,所以我做了一个看起来像这样的检查(我从另一个SO问题中提取): if([NSData respondsToSelector:@selector(base64EncodedStringWithOptions:)]) { 我需要让我的iOS lib与iOS 6兼容,所以我使它向前兼容iOS 7中可用的库,这使我的生活更轻松(最终让我删除旧代码).

例如,iOS 7中提供了原生base64编码,所以我做了一个看起来像这样的检查(我从另一个SO问题中提取):

if([NSData respondsToSelector:@selector(base64EncodedStringWithOptions:)]) {     // Do iOS 7 stuff} else {     // Break my head over iOS 6 compatibility}

这似乎工作正常,但我如何编写单元测试来检查这两种情况?如果我在单元测试中使用相同的if-else检查,那将会破坏单元测试的目的,不是吗?

解决方法 所以你能够测试它在iOS 6和iOS 7上运行的唯一真正方法是在两个版本上运行测试.鉴于此,编写一个测试方法的单元测试,然后让您的CI基础结构(Xcode Bots,Travis CI等)运行您支持的所有iOS版本的所有测试.一个以这种方式进行测试的项目是 Subliminal,它目前在iPhone和iPad上运行iOS 6和7上的测试.

编辑:

在此示例中,您有一个测试可以检查base64解码是否正确完成.这个方法不知道它运行的iOS版本 – 它只知道解码是否正常工作.您将设置CI基础结构以在iOS 6和7设备上运行此方法.当它在iOS 7设备上运行时,if会测试if语句的YES分支,而在iOS 6上它会测试if语句的NO分支.

- (voID)testEnCoding{    NSData *base64EncodedData = [@"aGVsbG8=" dataUsingEnCoding:NSUTF8StringEnCoding];    Nsstring *decodedString = [self decodeData:base64EncodedData];    XCTAssert([decodedString isEqualToString:@"hello"],@"The base64 encoded string should decode to the word `hello`");}- (Nsstring *)decodeData:(NSData *)data{    if ([data respondsToSelector:@selector(base64EncodedDataWithOptions:)]) {        return [[Nsstring alloc] initWithData:[[NSData alloc] initWithBase64EncodedData:data options:0]                                     enCoding:NSUTF8StringEnCoding];    } else {        // Whatever method you use on iOS 6 to decode the base 64 data.        return nil;    }}
总结

以上是内存溢出为你收集整理的ios – 如何根据SDK更改的方法创建单元测试?全部内容,希望文章能够帮你解决ios – 如何根据SDK更改的方法创建单元测试?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1023357.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存