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

时间:2016-11-05 11:33:35

标签: shell assertion eiffel enforcement

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确实报告违反合同。

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

1 个答案:

答案 0 :(得分:1)

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

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