2016-11-05 3 views
0

EiffelDesign by Contract입니다. 이에 따르면 임의의 루틴에 대해 requireensure과 같은 어설 션이 true 여야한다는 확인이 있습니다. 그러나 어설 션이 false 인 경우 컴파일러에서 또는 런타임에 throw 된 오류/예외가 있어야한다는 명령 줄을 통해 규칙을 적용하는 방법을 찾을 수 없었습니다. 예를 들어 에펠 명령 행을 통해 어서션을 시행하려면 어떻게해야합니까?

,이 루트 클래스,

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

사용하여 컴파일하고

, 에펠 스튜디오 계약의 위반을보고한다.

이렇게 어떻게 명령 줄을 통해이를 시행 할 수 있습니까? 사용할 특정 플래그가 있습니까?

답변

1

EiffelStudio의 GUI 버전이고 EiffelStudio의 명령 줄 버전은 새 프로젝트를 만들 때 다른 기본값을 사용합니다. 명령 줄 버전은 어설 션 모니터링을 해제하고 GUI 버전은 어설 션 모니터링을 켭니다. 실제로 GUI에서 명령 행 버전으로 작성된 프로젝트를 열거 나 반대로 명령 행 컴파일러로 GUI 버전에서 작성된 프로젝트를 컴파일 할 수 있습니다. 프로젝트 설정은 .ecf 파일에 보관되며 프로젝트의 일부입니다. 즉,이 .ecf 파일을 프로젝트와 함께 배포해야합니다. 다음 프로젝트로 이동 ( 열기 | 프로젝트 추가 | | 프로젝트 열기 파일)

이 GUI에서 .ecf을 열고, 당신이 설명하는 특정 문제를 해결하기 | 프로젝트 설정 | 어설 션, 모든 어설 션을 켜고 을 저장하고 GUI 버전을 종료하십시오. 이제 프로젝트를 명령 줄에서 다시 컴파일하면 어설 션이 켜지고 예상대로 실행 중에 예외 추적을 받게됩니다.

+0

나를 위해 작동하지 않습니다. 설정은 모든 어설 션이 true로 설정되어 있지만 bash를 사용하여 어설 션을 위반 한 경우에도 프로그램이 통과 함을 보여줍니다. – GoodDeeds

+0

@ GoodDeeds, 프로젝트 상단에서'application.ecf'를 보존하고 처음부터 다시 컴파일하면'EIFGENs' 디렉토리를 제거 하시겠습니까? –

관련 문제