Eiffel有一项功能Design by Contract。根据这一点,对于任何例程,都要检查require
和ensure
之类的断言是否为真。但是,我还没有能够找到如何通过命令行强制执行规则,如果断言为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确实报告违反合同。
那么,如何通过命令行强制执行此操作?是否有特定的标志可供使用?
答案 0 :(得分:1)
看起来像EiffelStudio的GUI版本和EiffelStudio的命令行版本在创建新项目时使用不同的默认值:命令行版本关闭断言监控,GUI版本打开断言监控。实际上,您可以在GUI中打开使用命令行版本创建的项目,或者相反,通过命令行编译器编译在GUI版本中创建的项目。项目设置保存在.ecf
文件中,并且是项目的一部分,即此.ecf
文件应与项目一起分发。
要解决您描述的特定问题,请在GUI中打开.ecf
(文件|打开项目|添加项目|打开),然后导航到项目|项目设置|断言,打开所有断言并按保存,退出GUI版本。现在,当您从命令行重新编译项目时,将打开断言,并在执行期间按预期获得异常跟踪。