2016-11-05 18 views
0

Eiffel hat eine Funktion Design by Contract. Demnach wird für jede Routine überprüft, ob Assertionen wie require und ensure wahr sein müssen. Ich konnte jedoch nicht herausfinden, wie die Regel über die Befehlszeile erzwungen werden kann. Wenn die Assertions falsch sind, muss ein Fehler/eine Ausnahme vom Compiler oder zur Laufzeit ausgelöst werden.Wie erzwinge ich Assertionen für Eiffel über die Befehlszeile?

Zum Beispiel, wenn dies ist die Wurzelklasse,

class 
    APPLICATION 

inherit 
    ARGUMENTS 

create 
    make 

feature {NONE} 


    object: TEST1 
    make 
      -- Run application. 
     do   
      create object 
      object.function(-1) 
      print(object.value) 
     end 
end 

und dies ist die TEST1 Klasse

class 
    TEST1 

feature 

    value: INTEGER 
      -- value for testing 
    function(val: INTEGER) 
      -- Assign 
     require 
      val>0 
     do 
      value:=val 
     ensure 
      value>0  
     end 

end 

Das Programm kompiliert und ausgeführt ohne Fehler, obwohl beide die Behauptungen verletzt .

I

ec application.e

jedoch Eiffel Studio bin mit der Zusammenstellung hat eine Vertragsverletzung melden.

Also, wie kann man dies durch die Befehlszeile erzwingen? Gibt es eine bestimmte Flagge?

Antwort

1

Es sieht so aus, als ob die GUI-Version von EiffelStudio und die Befehlszeilenversion von EiffelStudio beim Erstellen neuer Projekte unterschiedliche Standardwerte verwenden: Die Befehlszeilenversion deaktiviert die Assertion-Überwachung und die GUI-Version aktiviert die Assertion-Überwachung. Tatsächlich können Sie ein Projekt öffnen, das mit einer Befehlszeilenversion in der GUI erstellt wurde, oder umgekehrt ein Projekt kompilieren, das in der GUI-Version von einem Befehlszeilencompiler erstellt wurde. Die Projekteinstellungen werden in einer .ecf Datei gespeichert und sind Teil eines Projekts, d. H. Diese .ecf Datei sollte zusammen mit dem Projekt verteilt werden.

das besondere Problem adressieren Sie beschreiben, öffnen Sie die .ecf in GUI (Datei | Projekt öffnen | Project | Öffnen), dann nach Projekt navigieren | Projekteinstellungen | Assertions, aktivieren Sie alle Zusicherungen und drücken Sie Speichern Sie, beenden Sie die GUI-Version. Wenn Sie Ihr Projekt jetzt über die Befehlszeile neu kompilieren, werden die Assertions aktiviert und Sie erhalten während der Ausführung wie erwartet eine Ablaufverfolgung für Ausnahmen.

+0

Dies funktioniert nicht für mich. Die Einstellung zeigt, dass alle Assertions auf "True" gesetzt sind, aber das Programm wird auch dann ausgeführt, wenn die Assertion verletzt wird, wenn ich es mit bash ausführe. – GoodDeeds

+0

@GoodDeeds, Würden Sie versuchen, das Verzeichnis "EIFGENs" zu entfernen, indem Sie 'application.ecf' am Anfang des Projekts beibehalten und von Grund auf neu kompilieren? –

Verwandte Themen