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