Как мне применить утверждения для Eiffel через командную строку?
У Eiffel есть функция Design by Contract. Согласно этому, для любой рутины, есть проверка, что утверждения, такие как require
а также ensure
должно быть правдой. Тем не менее, я не смог выяснить, как применить правило через командную строку, что, если утверждения ложны, должна быть ошибка / исключение, выдаваемое компилятором или во время выполнения.
Например, если это корневой класс,
class
APPLICATION
inherit
ARGUMENTS
create
make
feature {NONE}
object: TEST1
make
-- Run application.
do
create object
object.function(-1)
print(object.value)
end
end
и это TEST1
учебный класс
class
TEST1
feature
value: INTEGER
-- value for testing
function(val: INTEGER)
-- Assign
require
val>0
do
value:=val
ensure
value>0
end
end
Программа компилируется и выполняется без каких-либо ошибок, даже если оба утверждения нарушены.
Я компилирую используя
ec application.e
Тем не менее, Eiffel Studio сообщает о нарушении договора.
Итак, как можно обеспечить это через командную строку? Есть ли определенный флаг для использования?
1 ответ
Похоже, что версия EiffelStudio с графическим интерфейсом и версия EiffelStudio для командной строки используют разные значения по умолчанию при создании новых проектов: версия командной строки отключает мониторинг утверждений, а версия GUI включает мониторинг утверждений. Фактически вы можете открыть проект, созданный с помощью версии командной строки в графическом интерфейсе, или, наоборот, скомпилировать проект, созданный в версии с графическим интерфейсом, с помощью компилятора командной строки. Настройки проекта хранятся в .ecf
файл и являются частью проекта, то есть это .ecf
Файл должен распространяться вместе с проектом.
Чтобы решить конкретную проблему, которую вы описываете, откройте .ecf
в GUI (Файл | Открыть проект | Добавить проект | Открыть), затем перейдите к Project | Настройки проекта | Утверждения, включите все утверждения и нажмите Сохранить, выйдите из версии GUI. Теперь, когда вы перекомпилируете свой проект из командной строки, утверждения будут включены, и вы получите трассировку исключений во время выполнения, как и ожидалось.