gpt4 book ai didi

ios - 单元测试提前返回 if 语句

转载 作者:行者123 更新时间:2023-11-28 21:36:27 26 4
gpt4 key购买 nike

我有这个代码

- (BOOL)shouldStartWithOptions:(Options *)options
{
if (...) {
return NO;
}

if (...) {
return NO;
}

if (...) {
return NO;
}

return YES;
}

- (void)startWithOptions:(Options *)options
{
if ([self shouldStartWithOptions:options]) {
return;
}

[self startProductA];
[self startProductB];
[self startProductC];
// and do other stuffs
}

当我调用 myMethod 并且 shouldReturn 返回 YES 时,我将如何对这个事实进行单元测试,然后我会提前返回。

一个想法是期望方法 anotherMethod 不被执行,但我认为这不是一个好主意,因为如果代码更新为以下内容,测试可能会保持绿色

- (void)myMethod
{
[self shouldReturn];
}

您还有其他想法吗?

最佳答案

How would I unit test ...

这完全取决于该方法的副作用是什么。据推测,这些陈述是正确的:

  • self shouldStartWithOptions: 为 false 时,该方法会在系统状态中产生一些可观察到的副作用。
  • self shouldStartWithOptions: 为真时,该方法不会产生该副作用。

因此,您测试“提前返回”的方法很简单,就是断言该方法的预期副作用在执行后是否存在。

but I don't think this would be a good idea since the test could remain green if the code is updates to the following ...

在这种情况下,“提前返回”测试不应保持绿色。考虑两个测试:

  1. 给定一个先决条件,观察到副作用。
  2. 给定另一个先决条件,观察到副作用。 (明确未观察到,因为观察到缺乏副作用。)

如果您从方法中删除条件,则第二个测试应该会失败,因为会始终观察到副作用。


单元测试就是观察和验证代码对系统的影响。无论这些效果是返回值,还是对提供的模拟的调用,还是系统中其他一些改变的状态……它总是相同的逻辑:

  • 安排 - 定义系统的已知先决条件
  • Act - 执行被测试的代码
  • 断言 - 验证观察到对系统的预期影响

这与方法本身的实现无关,而与外部对该方法的意图的期望有关。

关于ios - 单元测试提前返回 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33759868/

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