我想编写一种黑盒单元测试,该方法可以延迟调用另一个方法。 看起来像这样:

- (void) doSomething {
    // Do something
    [self performSelector:@selector(doSomethingLater) withObject:nil afterDelay:kDelay];
}

- (void) doSomethingLater { }

其中kDelay是常数,而doSomethingLater是私有的。 问题是kDelay是1秒,我不想减慢单元测试的执行速度。

在黑盒方法下(或尽可能多地)对doSomething进行单元测试的最佳方法是什么?

唯一想到的就是在类中添加一个方法来更改kDelay的值,但这可能会被其他开发人员偶然使用。 是否有侵入性较小的替代方法?

===============>>#1 票数:0

我不知道它是否具有较小的侵入性,但是您可以使用不会延迟的自己的版本来-[NSObject performSelector:withObject:afterDelay:]方法。

混乱意味着在运行时替换方法实现。 查看免费的JRSwizzle library

===============>>#2 票数:0

我要看的第一件事是检测该方法是否已执行。 因此,正如@Rob所说的,我将以另一种方法来研究。 测试中可能有一个地方设置了bool以表明它已被调用。

下一个问题是减少延迟。 由于KDelay是一个常数,因此您实际上无法做任何事情。 您可以将其更改为私有属性或可以在测试和设置中访问的属性,但仍对生产代码私有。

另一个选项(我没有研究过是否有可能!)是不必担心检测正在执行的方法,而是研究是否可以检测到调用是运行循环堆栈,等待执行。 如果您可以检测到存在未决呼叫而不是呼叫本身,则可以立即执行此操作,并且延迟变得无关紧要。

===============>>#3 票数:0

您的测试是否要确保已调用doSomethingLater并确保它已执行预期的操作,而您要做的就是缩短时间延迟? 如果是这样,我建议您创建一个私有方法,该方法将常量值返回给doSomething。 就像是:

@implementation MyClass

- (NSUInteger) getDelay {
    return kDelay;
} 

@end

然后,您可以使用诸如OCMock其他测试框架之类的各种功能在运行时中终止getDelay的实现。

  ask by hpique translate from so

未解决问题?本站智能推荐:

2回复

我应该对并发进行单元测试吗?

我有一些受并发影响的方法。 特别是“ Rush”(又名“比赛”)条件。 我应该对它们进行单元测试还是对它们进行集成/黑盒测试? 我认为设置单元测试可能是一个相当艰巨的任务,但也是集成测试...
1回复

单元测试的局限性是什么?

在大约(2)个工作日内,为我要实现的目标寻找正确的单元测试类型之后,我感觉好像我想要一些无法获得的东西。 看完(8)年前的文章后: 单元测试中的“不良”属性是什么? 我现在相信我要测试一个荒谬的配置。 我实质上是在尝试使用Google Test Framework对各种因素的组合进行黑
2回复

单元测试-白盒与黑盒策略

我发现,当编写单元测试时,尤其是对于不返回值的方法,我主要以白盒测试方式编写测试。 我可以使用反射来读取私有数据,以检查方法执行后是否处于正确的状态,等等。 这种方法有很多局限性,其中最重要的是 如果您重做方法,则需要更改测试,即使API保持不变 从信息隐藏(封装)的角
4回复

使用数据库回滚进行单元测试

我刚刚开始理解单元测试在ac#环境中的重要性。 现在,我想知道如何实现黑盒单元测试,在数据库上执行插入,删除和更新,然后在成功测试后清理数据。 您如何实际执行回滚插入/更新/删除数据的过程? 你只是重置索引并删除插入的行? 或者通过创建脚本来恢复表的原始状态? 请指导我,我很感
3回复

单元测试应该是黑盒测试还是白盒测试?

说我有三种方法,所有方法都非常相似,但输入类型不同: 这三个都使用相同的基础逻辑。 例如: double版本可能是唯一一个比较数字的版本,而另外两个版本只是将其输入转换为double 。 我们可以想象一些不同的单元测试:第一个输入较大,第二个较大,两个输入均为负,等等。 我
4回复

单元测试,黑盒测试和白盒测试[关闭]

什么是单元测试,黑盒测试和白盒测试? 我用谷歌搜索,但我发现的所有解释都非常技术性。 任何人都可以通过适当的例子以简单的方式回答这个问题吗?
1回复

我应该添加白/黑盒冗余单元测试吗?

我已经为我的项目编写了black-box单元测试。 重构之后,我在代码中采用了strategy pattern 。 即使在refactoring之后, black-box单元测试也涵盖了此代码。 但是我想知道:我是否应该添加white-box unit tests ,例如,检查
1回复

哪些技术对功能要求低且没有设计规范的单元测试?

以我的理解,设计规范有助于利用内部知识(白盒技术)来制定单元测试用例,而如果我们仅具有功能要求,则黑盒技术会更适合。 如果我们没有设计规范,并且需求经常含糊不清或没有明确的界限,会发生什么? 它将如何影响单元测试过程? 您如何补偿呢? 您是否利用自己的经验或特定的实践/技巧来填补空白
5回复

循环JUnit测试的最佳实践

在学校的作业中,我应该编写一个黑盒测试,该方法对于参数<80的返回true ,否则返回false 。 目前我的方法是 但是,这将需要100个单独的断言。 有最佳/更好的练习方法吗? 如果相关的话,我正在使用JUnit 5,但是如果需要的话,可以切换到JUnit 4(毕竟这只是
1回复

解决生产测试中的类别划分任务

我在一个问题上苦苦挣扎了很长时间,但是我无法设法找到解决类别划分问题的正确方法。 如果有人设法解释如何进行,我将非常高兴和感激。 好...这是示例: 答案应该是678,但我实在无法理解...