加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何实现或模拟“抽象”OCUnit测试类?

发布时间:2020-12-16 09:26:35 所属栏目:百科 来源:网络整理
导读:我在继承层次结构中组织了许多Objective-C类.他们都共享一个共同的父母,实现孩子们共享的所有行为.每个子类定义了一些使其工作的方法,并且父类为设计为由其子项实现/覆盖的方法引发了异常.这有效地使父类成为一个伪抽象类(因为它本身没用),即使Objective-C没
我在继承层次结构中组织了许多Objective-C类.他们都共享一个共同的父母,实现孩子们共享的所有行为.每个子类定义了一些使其工作的方法,并且父类为设计为由其子项实现/覆盖的方法引发了异常.这有效地使父类成为一个伪抽象类(因为它本身没用),即使Objective-C没有明确支持抽象类.

这个问题的关键在于我使用OCUnit对这个类层次结构进行单元测试,并且测试的结构类似:一个测试类,它运行公共行为,子类对应于每个被测试的子类.但是,在(有效抽象)父类上运行测试用例是有问题的,因为如果没有关键方法,单元测试将以惊人的方式失败. (在5个测试类中重复常见测试的替代方案实际上不是一个可接受的选项.)

我一直在使用的非理想解决方案是检查(在每个测试方法中)实例是否是父测试类,如果是,则进行挽救.这导致每个测试方法中的重复代码,如果一个单元测试是高度精细的,这个问题变得越来越烦人.此外,所有这些测试仍然执行并报告为成功,扭曲了实际运行的有意义测试的数量.

我更喜欢的是向OCUnit发出信号的方法“不要在这个类中运行任何测试,只在它的子类中运行它们.”据我所知,还没有一种方法可以做到这一点,类似于(BOOL)isAbstractTest方法,我可以实现/覆盖.有关更好地解决这个问题的最小重复的任何想法? OCUnit是否有能力以这种方式标记测试类,或者是时候提交Radar了?

编辑:这是一个link to the test code in question.注意频繁重复if(…)return;启动一个方法,包括使用NonConcreteClass()宏以简洁起见.

解决方法

如果不深入研究OCUnit本身,特别是-performTest的SenTestCase实现,我没有看到改进你当前正在做的事情的方法.如果它调用了一个方法来确定“我应该运行这个测试吗?”,你将被设置.默认实现将返回YES,而您的版本将类似于if语句.

我要提交雷达.最糟糕的情况是你的代码保持现在的状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读