gpt4 book ai didi

ios - 如何针对随 SDK 变化的方法创建单元测试?

转载 作者:可可西里 更新时间:2023-11-01 06:07:53 25 4
gpt4 key购买 nike

我需要让我的 iOS 库与 iOS 6+ 兼容,所以我要使其与 iOS 7 中可用的库向前兼容,这让我的生活更轻松(这最终会让我删除旧代码)。

例如,原生 base64 编码在 iOS 7+ 中可用,所以我做了一个看起来像这样的检查(我从另一个 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 变化的方法创建单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com