首页 文章

如何通过命令行强制执行Eiffel的断言?

提问于
浏览
0

Eiffel有一个功能Design by Contract . 根据这一点,对于任何例程,都要检查 requireensure 之类的断言是否必须为真 . 但是,我无法通过命令行找出如何强制执行规则,如果断言为false,则必须存在编译器或运行时抛出的错误/异常 .

例如,如果这是根类,

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确实报告违反 Contract .

那么,如何通过命令行强制执行此操作?是否有特定的标志可供使用?

1 回答

  • 1

    看起来像EiffelStudio的GUI版本和EiffelStudio的命令行版本在创建新项目时使用不同的默认值:命令行版本关闭断言监控,GUI版本打开断言监控 . 实际上,您可以在GUI中打开使用命令行版本创建的项目,或者相反,通过命令行编译器编译在GUI版本中创建的项目 . 项目设置保存在 .ecf 文件中,并且是项目的一部分,即此 .ecf 文件应与项目一起分发 .

    要解决您描述的特定问题,请在GUI中打开 .ecf (“文件”|“打开项目”|“添加项目”|“打开”),然后导航到“项目”|“项目” . 项目设置|断言,打开所有断言并按Save,退出GUI版本 . 现在,当您从命令行重新编译项目时,将打开断言,并且您将在执行期间按预期获得异常跟踪 .

相关问题