estudio 在应该检查 `require` 的时候不检查?
estudio does not check `require` when it should?
Eiffel Studio 似乎满足了我的要求,即使我在项目设置中启用了它们。据我所知,我花了一些时间在需求中设置一个断点...
我不明白我在这里遗漏了什么,正如您在我的示例中看到的那样,由于我对代码有相同的条件并且它进入了 (attached {POWER_DEVICE} a_csv.device as l_dev
),所以要求通过了。
继承断言的一般规则如下:
- 前提条件只能放宽;
- 后置条件只能加强
在特定示例中,有效的前提条件是
True
or else
valid_csv (a_csv) and then attached {POWER_DEVICE} a_csv.device
这反映在特征的平面形式中组合前提条件开头的关键字 require
和中间的 require else
。表达式 True
被继承。这是父级特征的前提条件。
一个可能的解决方案是将 valid_csv (a_csv)
移动到父特征,并在后代中重新定义 valid_csv
。如果 valid_csv
对所有调用都是通用的,但第二个测试因后代而异,则引入新功能 is_known
并在父级中有 2 个前提条件子句可能会更好:
is_valid_csv: is_valid_csv (a_csv)
is_known_csv: is_known_csv (a_csv)
is_known_csv
在 class POWER_CSV_PROCESSOR
中的实施将是
is_known_csv (a_csv: ...)
do
Result := attached {POWER_DEVICE} a_csv.device
end
并且 POWER_CSV_PROCESSOR
中特征 process
的前提条件将为空。
调用者然后会做类似的事情
if processor.is_known_csv (csv) then
processor.process (csv)
end
Eiffel Studio 似乎满足了我的要求,即使我在项目设置中启用了它们。据我所知,我花了一些时间在需求中设置一个断点...
我不明白我在这里遗漏了什么,正如您在我的示例中看到的那样,由于我对代码有相同的条件并且它进入了 (attached {POWER_DEVICE} a_csv.device as l_dev
),所以要求通过了。
继承断言的一般规则如下:
- 前提条件只能放宽;
- 后置条件只能加强
在特定示例中,有效的前提条件是
True
or else
valid_csv (a_csv) and then attached {POWER_DEVICE} a_csv.device
这反映在特征的平面形式中组合前提条件开头的关键字 require
和中间的 require else
。表达式 True
被继承。这是父级特征的前提条件。
一个可能的解决方案是将 valid_csv (a_csv)
移动到父特征,并在后代中重新定义 valid_csv
。如果 valid_csv
对所有调用都是通用的,但第二个测试因后代而异,则引入新功能 is_known
并在父级中有 2 个前提条件子句可能会更好:
is_valid_csv: is_valid_csv (a_csv)
is_known_csv: is_known_csv (a_csv)
is_known_csv
在 class POWER_CSV_PROCESSOR
中的实施将是
is_known_csv (a_csv: ...)
do
Result := attached {POWER_DEVICE} a_csv.device
end
并且 POWER_CSV_PROCESSOR
中特征 process
的前提条件将为空。
调用者然后会做类似的事情
if processor.is_known_csv (csv) then
processor.process (csv)
end