Estudio требует прохождения - PullRequest
0 голосов
/ 05 мая 2020

Eiffel Studio, похоже, выполняет мои требования, даже если я включил их в настройках проекта. И насколько я помню, я смог какое-то время поставить точку останова в требованиях ...

Я не понимаю, что мне здесь не хватает, как вы можете видеть в моем примере, требование проходит, поскольку у меня такое же условие в коде, и оно переходит в (attached {POWER_DEVICE} a_csv.device as l_dev).

enter image description here

1 Ответ

1 голос
/ 05 мая 2020

Общее правило для унаследованных утверждений следующее:

  • предварительные условия могут быть только ослаблены;
  • постусловия могут быть только усилены.

In В конкретном примере эффективным предварительным условием является

    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 в классе POWER_CSV_PROCESSOR будет

is_known_csv (a_csv: ...)
    do
        Result := attached {POWER_DEVICE} a_csv.device
    end

, а предварительное условие функции process в POWER_CSV_PROCESSOR будет пустым.

Затем вызывающий абонент сделает что-то вроде

if processor.is_known_csv (csv) then
    processor.process (csv)
end
...