基于iOS版本的条件单元测试

前端之家收集整理的这篇文章主要介绍了基于iOS版本的条件单元测试前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的单元测试套件包含一些仅适用于最新iOS版本的测试用例.预计,在较旧的iOS版本上运行套件时,这些测试会失败.

是否有标准方法来指示这些测试用例应仅在特定的iOS版本上运行?

我想到的一个选择:

- (void) testSomethingThatOnlyWorksOniOS7
{
    const BOOL iOS7OrHigher = floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1;
    if (!iOS7OrHigher) return;

    // Actual test goes here
}

或者,我可以告诉SenTestCase动态跳过某些测试吗?

解决方法

你的方法对我来说似乎很好.

一般来说,我认为没有像“标准方式”那样有选择地执行基于iOS版本的单元测试.

一方面,根据iOS版本,您的方法可以选择性地或以不同方式实现一个功能.可能你已经知道关于CocoaWithLove:Tips and Tricks from conditional…的这个讨论.它已经很老了,但是这里描述的方法仍然保持不变.

你没有指定单元测试的执行方式,但处理这个问题的真正酷的方法是IMO,它能够指定在实现之外执行哪些测试,以便你说明哪些只适用于iOS7和不要污染你的测试实现.

这可以通过例如与每个测试相关联的版本号来完成;在调用单元测试实现之前,请检查函数调用中的版本号,例如testSomethingThatOnlyWorksOniOS7.

编辑:

实际上,事情可能比我想到的更容易.现在我有点hacky ……

您可以在OCUnit中修改实际测试方法调用的位置(不知道这个,对不起,但我不认为应该很难找到…)以便它检查选择器名称:您转换将选择器名称转换为字符串(NSStringFromSelector),如果它匹配某个正则表达式,则需要一些特定的分支(在您的情况下,这将忽略该测试).

如果您担心修改OCUnit,这可能不合理,我上面所说的可以通过方法调配来完成:只有当选择器名称与您的表达式不匹配时,才调用原始实现,否则什么都不做.

猜你在找的iOS相关文章