Assertions in Ruby
ProgrammiersprachenIch habe heute versucht, Asserts unter Ruby zu nutzen, leider hab ich nirgends eine entsprechende Funktion dazu gefunden (natürlich bis auf die assert-Methoden bei den UnitTest, die man aber außerhalb einer TestSuite nicht nutzen kann). Also schnell (mit etwas Hilfe) selbst was gebastelt:
Eine neue Exception von der Standard-Exception ableiten
class AssertionFailure < StandardError
end
... und die Klasse Object um eine weitere Methode erweitern (in Ruby ist alles ein Objekt, auch die primitiven Datentypen. So hat man die assert-Methode überall verfügbar):
class Object
def assert
raise AssertionFailure.new unless yield if DEBUG
end
end
Die Konstante DEBUG muss man natürlich irgendwo auf true setzen, damit die Asserts ziehen. Ein kleines Beispiel (aus der heutigen SEKS-Vorlesung):
class NewMath
def sqrt(number)
assert {number >= 0} #pre-condition
# ...
res = Math.sqrt(number)
assert {res >= 0} #post-conditions
assert {res*res == number}
res
end
end
Und nun ein Test:
DEBUG = true
a = NewMath.new
puts a.sqrt(-1)
Hier wird nun eine AssertionFailure Exception geworfen. Unter Java ist die assert-Funktionalität bereits drin, muss aber mit dem Schalter -ea erst aktiviert werden.